Initial commit with the Mono Rot Bot
authorJustin Worthe <justin.worthe@entelect.co.za>
Mon, 14 Oct 2013 17:33:05 +0000 (19:33 +0200)
committerJustin Worthe <justin.worthe@entelect.co.za>
Mon, 14 Oct 2013 17:33:05 +0000 (19:33 +0200)
23 files changed:
Entelect.BattleCity.Challenge.sln [new file with mode: 0644]
Entelect.BattleCity.Challenge/AiAgent.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/App.config [new file with mode: 0644]
Entelect.BattleCity.Challenge/ChallengeService.wsdl [new file with mode: 0644]
Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj [new file with mode: 0644]
Entelect.BattleCity.Challenge/GameInProgress.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/Move.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/Program.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo [new file with mode: 0644]
Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo [new file with mode: 0644]
Entelect.BattleCity.Challenge/compile.bat [new file with mode: 0644]
Entelect.BattleCity.Challenge/start.bat [new file with mode: 0644]

diff --git a/Entelect.BattleCity.Challenge.sln b/Entelect.BattleCity.Challenge.sln
new file mode 100644 (file)
index 0000000..2b5f5ea
--- /dev/null
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entelect.BattleCity.Challenge", "Entelect.BattleCity.Challenge\Entelect.BattleCity.Challenge.csproj", "{B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/Entelect.BattleCity.Challenge/AiAgent.cs b/Entelect.BattleCity.Challenge/AiAgent.cs
new file mode 100644 (file)
index 0000000..e577bcb
--- /dev/null
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+
+namespace Entelect.BattleCity.Challenge
+{
+    class AiAgent
+    {
+        private int _tankId;
+
+        public AiAgent()
+        {
+
+        }
+
+        public AiAgent(int tankId)
+        {
+            _tankId = tankId;
+        }
+
+        public Move GetBestMove(ChallengeService.state?[][] state, ChallengeService.game game, int tankIndex)
+        {
+            ChallengeService.player me = null;
+            ChallengeService.player enemy = null;
+            ChallengeService.unit tank = null;
+            bool bulletInAir = false;
+
+            string playerName = game.playerName;
+            foreach (ChallengeService.player player in game.players)
+            {
+                if (player.name.Equals(playerName))
+                {
+                    me = player;
+                }
+                else
+                {
+                    enemy = player;
+                }
+            }
+            if (me.units.Length <= tankIndex)
+            {
+                return null;
+            }
+            tank = me.units[tankIndex];
+
+            if (me.bullets != null)
+            {
+                foreach (var bullet in me.bullets)
+                {
+                    if (Math.Abs(bullet.x - tank.x) < state.Length / 4)
+                    {
+                        bulletInAir = true;
+                    }
+                }
+            }
+
+            var enemyBase = enemy.@base;
+
+            ChallengeService.direction chosenDirection = 
+                tank.y != enemyBase.y ?
+                (
+                    tank.y > enemyBase.y ?
+                    ChallengeService.direction.UP :
+                    ChallengeService.direction.DOWN
+                ) :
+                (
+                    tank.x > enemyBase.x ?
+                    ChallengeService.direction.LEFT :
+                    ChallengeService.direction.RIGHT
+                );
+
+            if (chosenDirection != tank.direction || bulletInAir)
+            {
+                return MoveInDirection(tank.id, chosenDirection);
+            }
+            else
+            {
+                return new Move(tank.id, ChallengeService.action.FIRE);
+            }
+        }
+
+        public Move MoveInDirection(int tankId, ChallengeService.direction direction)
+        {
+            switch (direction)
+            {
+                case ChallengeService.direction.UP:
+                    return new Move(tankId, ChallengeService.action.UP);
+                case ChallengeService.direction.DOWN:
+                    return new Move(tankId, ChallengeService.action.DOWN);
+                case ChallengeService.direction.LEFT:
+                    return new Move(tankId, ChallengeService.action.LEFT);
+                case ChallengeService.direction.RIGHT:
+                    return new Move(tankId, ChallengeService.action.RIGHT);
+                default:
+                    return new Move(tankId, ChallengeService.action.NONE);
+            }
+        }
+    }
+}
diff --git a/Entelect.BattleCity.Challenge/App.config b/Entelect.BattleCity.Challenge/App.config
new file mode 100644 (file)
index 0000000..ef162fd
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+    <system.serviceModel>
+        <bindings>
+            <basicHttpBinding>
+                <binding name="ChallengeServiceSoapBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
+                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
+                      maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                </binding>
+            </basicHttpBinding>
+        </bindings>
+        <client>
+            <endpoint address="http://localhost:9090/ChallengePort" binding="basicHttpBinding"
+                bindingConfiguration="ChallengeServiceSoapBinding" contract="ChallengeService.Challenge"
+                name="ChallengePort" />
+        </client>
+    </system.serviceModel>
+</configuration>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/ChallengeService.wsdl b/Entelect.BattleCity.Challenge/ChallengeService.wsdl
new file mode 100644 (file)
index 0000000..225faee
--- /dev/null
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions name="ChallengeService" targetNamespace="http://challenge.entelect.co.za/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://challenge.entelect.co.za/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+  <wsdl:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://challenge.entelect.co.za/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://challenge.entelect.co.za/">
+  <xs:element name="getStatus" type="tns:getStatus"/>
+  <xs:element name="getStatusResponse" type="tns:getStatusResponse"/>
+  <xs:element name="login" type="tns:login"/>
+  <xs:element name="loginResponse" type="tns:loginResponse"/>
+  <xs:element name="setAction" type="tns:setAction"/>
+  <xs:element name="setActionResponse" type="tns:setActionResponse"/>
+  <xs:element name="setActions" type="tns:setActions"/>
+  <xs:element name="setActionsResponse" type="tns:setActionsResponse"/>
+  <xs:complexType name="getStatus">
+    <xs:sequence/>
+  </xs:complexType>
+  <xs:complexType name="getStatusResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="tns:game"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="game">
+    <xs:sequence>
+      <xs:element name="currentTick" type="xs:int"/>
+      <xs:element minOccurs="0" name="events" type="tns:events"/>
+      <xs:element name="millisecondsToNextTick" type="xs:long"/>
+      <xs:element minOccurs="0" name="nextTickTime" type="xs:dateTime"/>
+      <xs:element minOccurs="0" name="playerName" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="players" nillable="true" type="tns:player"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="events">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="blockEvents" nillable="true" type="tns:blockEvent"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="unitEvents" nillable="true" type="tns:unitEvent"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="blockEvent">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="newState" type="tns:state"/>
+      <xs:element minOccurs="0" name="point" type="tns:point"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="point">
+    <xs:sequence>
+      <xs:element name="x" type="xs:int"/>
+      <xs:element name="y" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="unitEvent">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="bullet" type="tns:bullet"/>
+      <xs:element name="tickTime" type="xs:int"/>
+      <xs:element minOccurs="0" name="unit" type="tns:unit"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="bullet">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="direction" type="tns:direction"/>
+      <xs:element name="id" type="xs:int"/>
+      <xs:element name="x" type="xs:int"/>
+      <xs:element name="y" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="unit">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="action" type="tns:action"/>
+      <xs:element minOccurs="0" name="direction" type="tns:direction"/>
+      <xs:element name="id" type="xs:int"/>
+      <xs:element name="x" type="xs:int"/>
+      <xs:element name="y" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="player">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="base" type="tns:base"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="bullets" nillable="true" type="tns:bullet"/>
+      <xs:element minOccurs="0" name="name" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="units" nillable="true" type="tns:unit"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="base">
+    <xs:sequence>
+      <xs:element name="x" type="xs:int"/>
+      <xs:element name="y" type="xs:int"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCollection">
+    <xs:sequence/>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractList">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCollection">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="arrayList">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractList">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="setAction">
+    <xs:sequence>
+      <xs:element name="arg0" type="xs:int"/>
+      <xs:element minOccurs="0" name="arg1" type="tns:action"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="setActionResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="tns:delta"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="delta">
+    <xs:sequence>
+      <xs:element name="millisecondsToNextTick" type="xs:long"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="login">
+    <xs:sequence/>
+  </xs:complexType>
+  <xs:complexType name="loginResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="tns:board"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="board">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="states" nillable="true" type="tns:stateArray"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="setActions">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="arg0" type="tns:action"/>
+      <xs:element minOccurs="0" name="arg1" type="tns:action"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="setActionsResponse">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="return" type="tns:delta"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:simpleType name="state">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FULL"/>
+      <xs:enumeration value="EMPTY"/>
+      <xs:enumeration value="OUT_OF_BOUNDS"/>
+      <xs:enumeration value="NONE"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="direction">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="NONE"/>
+      <xs:enumeration value="UP"/>
+      <xs:enumeration value="DOWN"/>
+      <xs:enumeration value="LEFT"/>
+      <xs:enumeration value="RIGHT"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="action">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="NONE"/>
+      <xs:enumeration value="UP"/>
+      <xs:enumeration value="DOWN"/>
+      <xs:enumeration value="LEFT"/>
+      <xs:enumeration value="RIGHT"/>
+      <xs:enumeration value="FIRE"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType final="#all" name="stateArray">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="item" nillable="true" type="tns:state"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="EndOfGameException" type="tns:EndOfGameException"/>
+  <xs:complexType name="EndOfGameException">
+    <xs:sequence/>
+  </xs:complexType>
+  <xs:element name="NoBlameException" type="tns:NoBlameException"/>
+  <xs:complexType name="NoBlameException">
+    <xs:sequence/>
+  </xs:complexType>
+</xs:schema>
+  </wsdl:types>
+  <wsdl:message name="setAction">
+    <wsdl:part name="parameters" element="tns:setAction">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="EndOfGameException">
+    <wsdl:part name="EndOfGameException" element="tns:EndOfGameException">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="setActions">
+    <wsdl:part name="parameters" element="tns:setActions">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="login">
+    <wsdl:part name="parameters" element="tns:login">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="setActionsResponse">
+    <wsdl:part name="parameters" element="tns:setActionsResponse">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="setActionResponse">
+    <wsdl:part name="parameters" element="tns:setActionResponse">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="loginResponse">
+    <wsdl:part name="parameters" element="tns:loginResponse">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="NoBlameException">
+    <wsdl:part name="NoBlameException" element="tns:NoBlameException">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="getStatus">
+    <wsdl:part name="parameters" element="tns:getStatus">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="getStatusResponse">
+    <wsdl:part name="parameters" element="tns:getStatusResponse">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="Challenge">
+    <wsdl:operation name="getStatus">
+      <wsdl:input name="getStatus" message="tns:getStatus">
+    </wsdl:input>
+      <wsdl:output name="getStatusResponse" message="tns:getStatusResponse">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="setAction">
+      <wsdl:input name="setAction" message="tns:setAction">
+    </wsdl:input>
+      <wsdl:output name="setActionResponse" message="tns:setActionResponse">
+    </wsdl:output>
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException">
+    </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="login">
+      <wsdl:input name="login" message="tns:login">
+    </wsdl:input>
+      <wsdl:output name="loginResponse" message="tns:loginResponse">
+    </wsdl:output>
+      <wsdl:fault name="NoBlameException" message="tns:NoBlameException">
+    </wsdl:fault>
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException">
+    </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="setActions">
+      <wsdl:input name="setActions" message="tns:setActions">
+    </wsdl:input>
+      <wsdl:output name="setActionsResponse" message="tns:setActionsResponse">
+    </wsdl:output>
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException">
+    </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="ChallengeServiceSoapBinding" type="tns:Challenge">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="getStatus">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="getStatus">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="getStatusResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="setAction">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="setAction">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="setActionResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault name="EndOfGameException" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="login">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="login">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="loginResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="NoBlameException">
+        <soap:fault name="NoBlameException" use="literal"/>
+      </wsdl:fault>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault name="EndOfGameException" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="setActions">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="setActions">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="setActionsResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault name="EndOfGameException" use="literal"/>
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ChallengeService">
+    <wsdl:port name="ChallengePort" binding="tns:ChallengeServiceSoapBinding">
+      <soap:address location="http://localhost:9090/ChallengePort"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
diff --git a/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj b/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj
new file mode 100644 (file)
index 0000000..83bc159
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Entelect.BattleCity.Challenge</RootNamespace>
+    <AssemblyName>Entelect.BattleCity.Challenge</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AiAgent.cs" />
+    <Compile Include="GameInProgress.cs" />
+    <Compile Include="Move.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service References\ChallengeService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="ChallengeService.wsdl" />
+    <None Include="Service References\ChallengeService\ChallengeService.wsdl" />
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.delta.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.game.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.state.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\ChallengeService\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ChallengeService\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ChallengeService\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ChallengeService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/GameInProgress.cs b/Entelect.BattleCity.Challenge/GameInProgress.cs
new file mode 100644 (file)
index 0000000..61fa436
--- /dev/null
@@ -0,0 +1,64 @@
+using System;
+using System.Windows;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Entelect.BattleCity.Challenge
+{
+    class GameInProgress
+    {
+        public static void run(ChallengeService.ChallengeClient service, ChallengeService.state?[][] state)
+        {
+            AiAgent agent = new AiAgent();
+
+            while (true)
+            {
+                var game = service.getStatus();
+                long currentTick = DateTime.Now.Ticks;
+                long nextTick = game.nextTickTime.Ticks;
+                if (currentTick > nextTick)
+                {
+                    continue;
+                }
+
+                // AI logic here
+                Move tank1Move = agent.GetBestMove(state, game, 0);
+                Move tank2Move = agent.GetBestMove(state, game, 1);
+
+                if (tank1Move != null)
+                {
+                    service.setActionAsync(tank1Move.Tank, tank1Move.Action);
+                }
+                if (tank2Move != null)
+                {
+                    service.setActionAsync(tank2Move.Tank, tank2Move.Action);
+                }
+
+                currentTick = DateTime.Now.Ticks;
+
+                long sleepTime = nextTick - currentTick;
+                if (sleepTime < 0L)
+                {
+                    Console.Error.WriteLine("ERROR: Gone passed the next tick time");
+                }
+                else
+                {
+                    Console.WriteLine("Sleeping until {1} for {0}ms", sleepTime, game.nextTickTime.ToString());
+                }
+
+                try
+                {
+                    Thread.Sleep(TimeSpan.FromTicks(sleepTime));
+                }
+                catch (Exception)
+                {
+                    continue;
+                }
+                //while (startTick < nextTick)
+                //{
+                //    startTick += (DateTime.Now.Ticks - startTick);
+                //}
+            }
+        }
+    }
+}
diff --git a/Entelect.BattleCity.Challenge/Move.cs b/Entelect.BattleCity.Challenge/Move.cs
new file mode 100644 (file)
index 0000000..1813c59
--- /dev/null
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Entelect.BattleCity.Challenge
+{
+    class Move
+    {
+        public int Tank { get; private set; }
+        public ChallengeService.action Action { get; private set; }
+
+        public Move(int tank, ChallengeService.action action)
+        {
+            Tank = tank;
+            Action = action;
+        }
+    }
+}
diff --git a/Entelect.BattleCity.Challenge/Program.cs b/Entelect.BattleCity.Challenge/Program.cs
new file mode 100644 (file)
index 0000000..5764426
--- /dev/null
@@ -0,0 +1,16 @@
+using System.ServiceModel;
+
+namespace Entelect.BattleCity.Challenge
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            var endpointConfigurationName = "ChallengePort";
+            var address = new EndpointAddress(args[0]);
+            var service = new ChallengeService.ChallengeClient(endpointConfigurationName, address);
+            var state = service.login();
+            GameInProgress.run(service, state);
+        }
+    }
+}
diff --git a/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs b/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs
new file mode 100644 (file)
index 0000000..97397b4
--- /dev/null
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Entelect.BattleCity.Challenge")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Entelect.BattleCity.Challenge")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8e9e513d-3232-4b92-83dd-13ec54131857")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl b/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl
new file mode 100644 (file)
index 0000000..0d7d4a9
--- /dev/null
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://challenge.entelect.co.za/" name="ChallengeService" targetNamespace="http://challenge.entelect.co.za/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsdl:types>
+    <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://challenge.entelect.co.za/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+      <xs:element name="getStatus" type="tns:getStatus" />
+      <xs:element name="getStatusResponse" type="tns:getStatusResponse" />
+      <xs:element name="login" type="tns:login" />
+      <xs:element name="loginResponse" type="tns:loginResponse" />
+      <xs:element name="setAction" type="tns:setAction" />
+      <xs:element name="setActionResponse" type="tns:setActionResponse" />
+      <xs:element name="setActions" type="tns:setActions" />
+      <xs:element name="setActionsResponse" type="tns:setActionsResponse" />
+      <xs:complexType name="getStatus">
+        <xs:sequence />
+      </xs:complexType>
+      <xs:complexType name="getStatusResponse">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="return" type="tns:game" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="game">
+        <xs:sequence>
+          <xs:element name="currentTick" type="xs:int" />
+          <xs:element minOccurs="0" name="events" type="tns:events" />
+          <xs:element name="millisecondsToNextTick" type="xs:long" />
+          <xs:element minOccurs="0" name="nextTickTime" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="playerName" type="xs:string" />
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="players" nillable="true" type="tns:player" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="events">
+        <xs:sequence>
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="blockEvents" nillable="true" type="tns:blockEvent" />
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="unitEvents" nillable="true" type="tns:unitEvent" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="blockEvent">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="newState" type="tns:state" />
+          <xs:element minOccurs="0" name="point" type="tns:point" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="point">
+        <xs:sequence>
+          <xs:element name="x" type="xs:int" />
+          <xs:element name="y" type="xs:int" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="unitEvent">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="bullet" type="tns:bullet" />
+          <xs:element name="tickTime" type="xs:int" />
+          <xs:element minOccurs="0" name="unit" type="tns:unit" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="bullet">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="direction" type="tns:direction" />
+          <xs:element name="id" type="xs:int" />
+          <xs:element name="x" type="xs:int" />
+          <xs:element name="y" type="xs:int" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="unit">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="action" type="tns:action" />
+          <xs:element minOccurs="0" name="direction" type="tns:direction" />
+          <xs:element name="id" type="xs:int" />
+          <xs:element name="x" type="xs:int" />
+          <xs:element name="y" type="xs:int" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="player">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="base" type="tns:base" />
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="bullets" nillable="true" type="tns:bullet" />
+          <xs:element minOccurs="0" name="name" type="xs:string" />
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="units" nillable="true" type="tns:unit" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="base">
+        <xs:sequence>
+          <xs:element name="x" type="xs:int" />
+          <xs:element name="y" type="xs:int" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="abstractCollection" abstract="true">
+        <xs:sequence />
+      </xs:complexType>
+      <xs:complexType name="abstractList" abstract="true">
+        <xs:complexContent mixed="false">
+          <xs:extension base="tns:abstractCollection">
+            <xs:sequence />
+          </xs:extension>
+        </xs:complexContent>
+      </xs:complexType>
+      <xs:complexType name="arrayList">
+        <xs:complexContent mixed="false">
+          <xs:extension base="tns:abstractList">
+            <xs:sequence />
+          </xs:extension>
+        </xs:complexContent>
+      </xs:complexType>
+      <xs:complexType name="setAction">
+        <xs:sequence>
+          <xs:element name="arg0" type="xs:int" />
+          <xs:element minOccurs="0" name="arg1" type="tns:action" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="setActionResponse">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="return" type="tns:delta" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="delta">
+        <xs:sequence>
+          <xs:element name="millisecondsToNextTick" type="xs:long" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="login">
+        <xs:sequence />
+      </xs:complexType>
+      <xs:complexType name="loginResponse">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="return" type="tns:board" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="board">
+        <xs:sequence>
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="states" nillable="true" type="tns:stateArray" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="setActions">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="arg0" type="tns:action" />
+          <xs:element minOccurs="0" name="arg1" type="tns:action" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:complexType name="setActionsResponse">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="return" type="tns:delta" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:simpleType name="state">
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="FULL" />
+          <xs:enumeration value="EMPTY" />
+          <xs:enumeration value="OUT_OF_BOUNDS" />
+          <xs:enumeration value="NONE" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType name="direction">
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="NONE" />
+          <xs:enumeration value="UP" />
+          <xs:enumeration value="DOWN" />
+          <xs:enumeration value="LEFT" />
+          <xs:enumeration value="RIGHT" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType name="action">
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="NONE" />
+          <xs:enumeration value="UP" />
+          <xs:enumeration value="DOWN" />
+          <xs:enumeration value="LEFT" />
+          <xs:enumeration value="RIGHT" />
+          <xs:enumeration value="FIRE" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:complexType name="stateArray" final="#all">
+        <xs:sequence>
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="item" nillable="true" type="tns:state" />
+        </xs:sequence>
+      </xs:complexType>
+      <xs:element name="EndOfGameException" type="tns:EndOfGameException" />
+      <xs:complexType name="EndOfGameException">
+        <xs:sequence />
+      </xs:complexType>
+      <xs:element name="NoBlameException" type="tns:NoBlameException" />
+      <xs:complexType name="NoBlameException">
+        <xs:sequence />
+      </xs:complexType>
+    </xs:schema>
+  </wsdl:types>
+  <wsdl:message name="setAction">
+    <wsdl:part name="parameters" element="tns:setAction" />
+  </wsdl:message>
+  <wsdl:message name="EndOfGameException">
+    <wsdl:part name="EndOfGameException" element="tns:EndOfGameException" />
+  </wsdl:message>
+  <wsdl:message name="setActions">
+    <wsdl:part name="parameters" element="tns:setActions" />
+  </wsdl:message>
+  <wsdl:message name="login">
+    <wsdl:part name="parameters" element="tns:login" />
+  </wsdl:message>
+  <wsdl:message name="setActionsResponse">
+    <wsdl:part name="parameters" element="tns:setActionsResponse" />
+  </wsdl:message>
+  <wsdl:message name="setActionResponse">
+    <wsdl:part name="parameters" element="tns:setActionResponse" />
+  </wsdl:message>
+  <wsdl:message name="loginResponse">
+    <wsdl:part name="parameters" element="tns:loginResponse" />
+  </wsdl:message>
+  <wsdl:message name="NoBlameException">
+    <wsdl:part name="NoBlameException" element="tns:NoBlameException" />
+  </wsdl:message>
+  <wsdl:message name="getStatus">
+    <wsdl:part name="parameters" element="tns:getStatus" />
+  </wsdl:message>
+  <wsdl:message name="getStatusResponse">
+    <wsdl:part name="parameters" element="tns:getStatusResponse" />
+  </wsdl:message>
+  <wsdl:portType name="Challenge">
+    <wsdl:operation name="getStatus">
+      <wsdl:input name="getStatus" message="tns:getStatus" />
+      <wsdl:output name="getStatusResponse" message="tns:getStatusResponse" />
+    </wsdl:operation>
+    <wsdl:operation name="setAction">
+      <wsdl:input name="setAction" message="tns:setAction" />
+      <wsdl:output name="setActionResponse" message="tns:setActionResponse" />
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+    </wsdl:operation>
+    <wsdl:operation name="login">
+      <wsdl:input name="login" message="tns:login" />
+      <wsdl:output name="loginResponse" message="tns:loginResponse" />
+      <wsdl:fault name="NoBlameException" message="tns:NoBlameException" />
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+    </wsdl:operation>
+    <wsdl:operation name="setActions">
+      <wsdl:input name="setActions" message="tns:setActions" />
+      <wsdl:output name="setActionsResponse" message="tns:setActionsResponse" />
+      <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="ChallengeServiceSoapBinding" type="tns:Challenge">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="getStatus">
+      <soap:operation soapAction="" style="document" />
+      <wsdl:input name="getStatus">
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output name="getStatusResponse">
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="setAction">
+      <soap:operation soapAction="" style="document" />
+      <wsdl:input name="setAction">
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output name="setActionResponse">
+        <soap:body use="literal" />
+      </wsdl:output>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault use="literal" name="EndOfGameException" namespace="" />
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="login">
+      <soap:operation soapAction="" style="document" />
+      <wsdl:input name="login">
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output name="loginResponse">
+        <soap:body use="literal" />
+      </wsdl:output>
+      <wsdl:fault name="NoBlameException">
+        <soap:fault use="literal" name="NoBlameException" namespace="" />
+      </wsdl:fault>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault use="literal" name="EndOfGameException" namespace="" />
+      </wsdl:fault>
+    </wsdl:operation>
+    <wsdl:operation name="setActions">
+      <soap:operation soapAction="" style="document" />
+      <wsdl:input name="setActions">
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output name="setActionsResponse">
+        <soap:body use="literal" />
+      </wsdl:output>
+      <wsdl:fault name="EndOfGameException">
+        <soap:fault use="literal" name="EndOfGameException" namespace="" />
+      </wsdl:fault>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ChallengeService">
+    <wsdl:port name="ChallengePort" binding="tns:ChallengeServiceSoapBinding">
+      <soap:address location="http://localhost:9090/ChallengePort" />
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource
new file mode 100644 (file)
index 0000000..ba30593
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="delta" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.delta, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource
new file mode 100644 (file)
index 0000000..295ea08
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="game" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.game, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource
new file mode 100644 (file)
index 0000000..6701b3e
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="getStatusResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource
new file mode 100644 (file)
index 0000000..edbecd4
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="loginResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.loginResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource
new file mode 100644 (file)
index 0000000..4992e1b
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="setActionResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.setActionResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource
new file mode 100644 (file)
index 0000000..4ea2b14
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="setActionsResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource
new file mode 100644 (file)
index 0000000..caa94f3
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="state" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.state, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs
new file mode 100644 (file)
index 0000000..f7fda50
--- /dev/null
@@ -0,0 +1,1104 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18051
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Entelect.BattleCity.Challenge.ChallengeService {
+    
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class EndOfGameException : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class delta : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private long millisecondsToNextTickField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public long millisecondsToNextTick {
+            get {
+                return this.millisecondsToNextTickField;
+            }
+            set {
+                this.millisecondsToNextTickField = value;
+                this.RaisePropertyChanged("millisecondsToNextTick");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class @base : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private int xField;
+        
+        private int yField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public int x {
+            get {
+                return this.xField;
+            }
+            set {
+                this.xField = value;
+                this.RaisePropertyChanged("x");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public int y {
+            get {
+                return this.yField;
+            }
+            set {
+                this.yField = value;
+                this.RaisePropertyChanged("y");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class player : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private @base baseField;
+        
+        private bullet[] bulletsField;
+        
+        private string nameField;
+        
+        private unit[] unitsField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public @base @base {
+            get {
+                return this.baseField;
+            }
+            set {
+                this.baseField = value;
+                this.RaisePropertyChanged("base");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute("bullets", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+        public bullet[] bullets {
+            get {
+                return this.bulletsField;
+            }
+            set {
+                this.bulletsField = value;
+                this.RaisePropertyChanged("bullets");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+        public string name {
+            get {
+                return this.nameField;
+            }
+            set {
+                this.nameField = value;
+                this.RaisePropertyChanged("name");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute("units", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=3)]
+        public unit[] units {
+            get {
+                return this.unitsField;
+            }
+            set {
+                this.unitsField = value;
+                this.RaisePropertyChanged("units");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class bullet : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private direction directionField;
+        
+        private bool directionFieldSpecified;
+        
+        private int idField;
+        
+        private int xField;
+        
+        private int yField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public direction direction {
+            get {
+                return this.directionField;
+            }
+            set {
+                this.directionField = value;
+                this.RaisePropertyChanged("direction");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        public bool directionSpecified {
+            get {
+                return this.directionFieldSpecified;
+            }
+            set {
+                this.directionFieldSpecified = value;
+                this.RaisePropertyChanged("directionSpecified");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public int id {
+            get {
+                return this.idField;
+            }
+            set {
+                this.idField = value;
+                this.RaisePropertyChanged("id");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+        public int x {
+            get {
+                return this.xField;
+            }
+            set {
+                this.xField = value;
+                this.RaisePropertyChanged("x");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+        public int y {
+            get {
+                return this.yField;
+            }
+            set {
+                this.yField = value;
+                this.RaisePropertyChanged("y");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public enum direction {
+        
+        /// <remarks/>
+        NONE,
+        
+        /// <remarks/>
+        UP,
+        
+        /// <remarks/>
+        DOWN,
+        
+        /// <remarks/>
+        LEFT,
+        
+        /// <remarks/>
+        RIGHT,
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class unit : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private action actionField;
+        
+        private bool actionFieldSpecified;
+        
+        private direction directionField;
+        
+        private bool directionFieldSpecified;
+        
+        private int idField;
+        
+        private int xField;
+        
+        private int yField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public action action {
+            get {
+                return this.actionField;
+            }
+            set {
+                this.actionField = value;
+                this.RaisePropertyChanged("action");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        public bool actionSpecified {
+            get {
+                return this.actionFieldSpecified;
+            }
+            set {
+                this.actionFieldSpecified = value;
+                this.RaisePropertyChanged("actionSpecified");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public direction direction {
+            get {
+                return this.directionField;
+            }
+            set {
+                this.directionField = value;
+                this.RaisePropertyChanged("direction");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        public bool directionSpecified {
+            get {
+                return this.directionFieldSpecified;
+            }
+            set {
+                this.directionFieldSpecified = value;
+                this.RaisePropertyChanged("directionSpecified");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+        public int id {
+            get {
+                return this.idField;
+            }
+            set {
+                this.idField = value;
+                this.RaisePropertyChanged("id");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+        public int x {
+            get {
+                return this.xField;
+            }
+            set {
+                this.xField = value;
+                this.RaisePropertyChanged("x");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
+        public int y {
+            get {
+                return this.yField;
+            }
+            set {
+                this.yField = value;
+                this.RaisePropertyChanged("y");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public enum action {
+        
+        /// <remarks/>
+        NONE,
+        
+        /// <remarks/>
+        UP,
+        
+        /// <remarks/>
+        DOWN,
+        
+        /// <remarks/>
+        LEFT,
+        
+        /// <remarks/>
+        RIGHT,
+        
+        /// <remarks/>
+        FIRE,
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class unitEvent : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private bullet bulletField;
+        
+        private int tickTimeField;
+        
+        private unit unitField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public bullet bullet {
+            get {
+                return this.bulletField;
+            }
+            set {
+                this.bulletField = value;
+                this.RaisePropertyChanged("bullet");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public int tickTime {
+            get {
+                return this.tickTimeField;
+            }
+            set {
+                this.tickTimeField = value;
+                this.RaisePropertyChanged("tickTime");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+        public unit unit {
+            get {
+                return this.unitField;
+            }
+            set {
+                this.unitField = value;
+                this.RaisePropertyChanged("unit");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class point : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private int xField;
+        
+        private int yField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public int x {
+            get {
+                return this.xField;
+            }
+            set {
+                this.xField = value;
+                this.RaisePropertyChanged("x");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public int y {
+            get {
+                return this.yField;
+            }
+            set {
+                this.yField = value;
+                this.RaisePropertyChanged("y");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class blockEvent : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private state newStateField;
+        
+        private bool newStateFieldSpecified;
+        
+        private point pointField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public state newState {
+            get {
+                return this.newStateField;
+            }
+            set {
+                this.newStateField = value;
+                this.RaisePropertyChanged("newState");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        public bool newStateSpecified {
+            get {
+                return this.newStateFieldSpecified;
+            }
+            set {
+                this.newStateFieldSpecified = value;
+                this.RaisePropertyChanged("newStateSpecified");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public point point {
+            get {
+                return this.pointField;
+            }
+            set {
+                this.pointField = value;
+                this.RaisePropertyChanged("point");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public enum state {
+        
+        /// <remarks/>
+        FULL,
+        
+        /// <remarks/>
+        EMPTY,
+        
+        /// <remarks/>
+        OUT_OF_BOUNDS,
+        
+        /// <remarks/>
+        NONE,
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class events : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private blockEvent[] blockEventsField;
+        
+        private unitEvent[] unitEventsField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute("blockEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=0)]
+        public blockEvent[] blockEvents {
+            get {
+                return this.blockEventsField;
+            }
+            set {
+                this.blockEventsField = value;
+                this.RaisePropertyChanged("blockEvents");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute("unitEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+        public unitEvent[] unitEvents {
+            get {
+                return this.unitEventsField;
+            }
+            set {
+                this.unitEventsField = value;
+                this.RaisePropertyChanged("unitEvents");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class game : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        private int currentTickField;
+        
+        private events eventsField;
+        
+        private long millisecondsToNextTickField;
+        
+        private System.DateTime nextTickTimeField;
+        
+        private bool nextTickTimeFieldSpecified;
+        
+        private string playerNameField;
+        
+        private player[] playersField;
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+        public int currentTick {
+            get {
+                return this.currentTickField;
+            }
+            set {
+                this.currentTickField = value;
+                this.RaisePropertyChanged("currentTick");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+        public events events {
+            get {
+                return this.eventsField;
+            }
+            set {
+                this.eventsField = value;
+                this.RaisePropertyChanged("events");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+        public long millisecondsToNextTick {
+            get {
+                return this.millisecondsToNextTickField;
+            }
+            set {
+                this.millisecondsToNextTickField = value;
+                this.RaisePropertyChanged("millisecondsToNextTick");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+        public System.DateTime nextTickTime {
+            get {
+                return this.nextTickTimeField;
+            }
+            set {
+                this.nextTickTimeField = value;
+                this.RaisePropertyChanged("nextTickTime");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlIgnoreAttribute()]
+        public bool nextTickTimeSpecified {
+            get {
+                return this.nextTickTimeFieldSpecified;
+            }
+            set {
+                this.nextTickTimeFieldSpecified = value;
+                this.RaisePropertyChanged("nextTickTimeSpecified");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
+        public string playerName {
+            get {
+                return this.playerNameField;
+            }
+            set {
+                this.playerNameField = value;
+                this.RaisePropertyChanged("playerName");
+            }
+        }
+        
+        /// <remarks/>
+        [System.Xml.Serialization.XmlElementAttribute("players", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=5)]
+        public player[] players {
+            get {
+                return this.playersField;
+            }
+            set {
+                this.playersField = value;
+                this.RaisePropertyChanged("players");
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    /// <remarks/>
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+    [System.SerializableAttribute()]
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.ComponentModel.DesignerCategoryAttribute("code")]
+    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+    public partial class NoBlameException : object, System.ComponentModel.INotifyPropertyChanged {
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(Namespace="http://challenge.entelect.co.za/", ConfigurationName="ChallengeService.Challenge")]
+    public interface Challenge {
+        
+        // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+        Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse getStatus(Entelect.BattleCity.Challenge.ChallengeService.getStatus request);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> getStatusAsync(Entelect.BattleCity.Challenge.ChallengeService.getStatus request);
+        
+        // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+        Entelect.BattleCity.Challenge.ChallengeService.setActionResponse setAction(Entelect.BattleCity.Challenge.ChallengeService.setAction request);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> setActionAsync(Entelect.BattleCity.Challenge.ChallengeService.setAction request);
+        
+        // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlArrayAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.NoBlameException), Action="", Name="NoBlameException")]
+        [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+        Entelect.BattleCity.Challenge.ChallengeService.loginResponse login(Entelect.BattleCity.Challenge.ChallengeService.login request);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> loginAsync(Entelect.BattleCity.Challenge.ChallengeService.login request);
+        
+        // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+        [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+        Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse setActions(Entelect.BattleCity.Challenge.ChallengeService.setActions request);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.setActions request);
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="getStatus", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class getStatus {
+        
+        public getStatus() {
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="getStatusResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class getStatusResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.game @return;
+        
+        public getStatusResponse() {
+        }
+        
+        public getStatusResponse(Entelect.BattleCity.Challenge.ChallengeService.game @return) {
+            this.@return = @return;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="setAction", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class setAction {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public int arg0;
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=1)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.action arg1;
+        
+        public setAction() {
+        }
+        
+        public setAction(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            this.arg0 = arg0;
+            this.arg1 = arg1;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="setActionResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class setActionResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.delta @return;
+        
+        public setActionResponse() {
+        }
+        
+        public setActionResponse(Entelect.BattleCity.Challenge.ChallengeService.delta @return) {
+            this.@return = @return;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="login", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class login {
+        
+        public login() {
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="loginResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class loginResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        [System.Xml.Serialization.XmlArrayItemAttribute("states", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        [System.Xml.Serialization.XmlArrayItemAttribute("item", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, NestingLevel=1)]
+        public System.Nullable<state>[][] @return;
+        
+        public loginResponse() {
+        }
+        
+        public loginResponse(System.Nullable<state>[][] @return) {
+            this.@return = @return;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="setActions", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class setActions {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.action arg0;
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=1)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.action arg1;
+        
+        public setActions() {
+        }
+        
+        public setActions(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            this.arg0 = arg0;
+            this.arg1 = arg1;
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+    [System.ServiceModel.MessageContractAttribute(WrapperName="setActionsResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+    public partial class setActionsResponse {
+        
+        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+        public Entelect.BattleCity.Challenge.ChallengeService.delta @return;
+        
+        public setActionsResponse() {
+        }
+        
+        public setActionsResponse(Entelect.BattleCity.Challenge.ChallengeService.delta @return) {
+            this.@return = @return;
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface ChallengeChannel : Entelect.BattleCity.Challenge.ChallengeService.Challenge, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class ChallengeClient : System.ServiceModel.ClientBase<Entelect.BattleCity.Challenge.ChallengeService.Challenge>, Entelect.BattleCity.Challenge.ChallengeService.Challenge {
+        
+        public ChallengeClient() {
+        }
+        
+        public ChallengeClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public ChallengeClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ChallengeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ChallengeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.getStatus(Entelect.BattleCity.Challenge.ChallengeService.getStatus request) {
+            return base.Channel.getStatus(request);
+        }
+        
+        public Entelect.BattleCity.Challenge.ChallengeService.game getStatus() {
+            Entelect.BattleCity.Challenge.ChallengeService.getStatus inValue = new Entelect.BattleCity.Challenge.ChallengeService.getStatus();
+            Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).getStatus(inValue);
+            return retVal.@return;
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.getStatusAsync(Entelect.BattleCity.Challenge.ChallengeService.getStatus request) {
+            return base.Channel.getStatusAsync(request);
+        }
+        
+        public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> getStatusAsync() {
+            Entelect.BattleCity.Challenge.ChallengeService.getStatus inValue = new Entelect.BattleCity.Challenge.ChallengeService.getStatus();
+            return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).getStatusAsync(inValue);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Entelect.BattleCity.Challenge.ChallengeService.setActionResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.setAction(Entelect.BattleCity.Challenge.ChallengeService.setAction request) {
+            return base.Channel.setAction(request);
+        }
+        
+        public Entelect.BattleCity.Challenge.ChallengeService.delta setAction(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            Entelect.BattleCity.Challenge.ChallengeService.setAction inValue = new Entelect.BattleCity.Challenge.ChallengeService.setAction();
+            inValue.arg0 = arg0;
+            inValue.arg1 = arg1;
+            Entelect.BattleCity.Challenge.ChallengeService.setActionResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setAction(inValue);
+            return retVal.@return;
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActionAsync(Entelect.BattleCity.Challenge.ChallengeService.setAction request) {
+            return base.Channel.setActionAsync(request);
+        }
+        
+        public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> setActionAsync(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            Entelect.BattleCity.Challenge.ChallengeService.setAction inValue = new Entelect.BattleCity.Challenge.ChallengeService.setAction();
+            inValue.arg0 = arg0;
+            inValue.arg1 = arg1;
+            return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActionAsync(inValue);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Entelect.BattleCity.Challenge.ChallengeService.loginResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.login(Entelect.BattleCity.Challenge.ChallengeService.login request) {
+            return base.Channel.login(request);
+        }
+        
+        public System.Nullable<state>[][] login() {
+            Entelect.BattleCity.Challenge.ChallengeService.login inValue = new Entelect.BattleCity.Challenge.ChallengeService.login();
+            Entelect.BattleCity.Challenge.ChallengeService.loginResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).login(inValue);
+            return retVal.@return;
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.loginAsync(Entelect.BattleCity.Challenge.ChallengeService.login request) {
+            return base.Channel.loginAsync(request);
+        }
+        
+        public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> loginAsync() {
+            Entelect.BattleCity.Challenge.ChallengeService.login inValue = new Entelect.BattleCity.Challenge.ChallengeService.login();
+            return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).loginAsync(inValue);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActions(Entelect.BattleCity.Challenge.ChallengeService.setActions request) {
+            return base.Channel.setActions(request);
+        }
+        
+        public Entelect.BattleCity.Challenge.ChallengeService.delta setActions(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            Entelect.BattleCity.Challenge.ChallengeService.setActions inValue = new Entelect.BattleCity.Challenge.ChallengeService.setActions();
+            inValue.arg0 = arg0;
+            inValue.arg1 = arg1;
+            Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActions(inValue);
+            return retVal.@return;
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.setActions request) {
+            return base.Channel.setActionsAsync(request);
+        }
+        
+        public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+            Entelect.BattleCity.Challenge.ChallengeService.setActions inValue = new Entelect.BattleCity.Challenge.ChallengeService.setActions();
+            inValue.arg0 = arg0;
+            inValue.arg1 = arg1;
+            return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActionsAsync(inValue);
+        }
+    }
+}
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap b/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap
new file mode 100644 (file)
index 0000000..8cd1468
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="e8b44f4a-1597-4192-bc17-217131128c7c" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <GenerateTaskBasedAsynchronousMethod>true</GenerateTaskBasedAsynchronousMethod>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="C:\Workspace\Development\Entelect\C#.bot - starter pack\Entelect.BattleCity.Challenge\ChallengeService.wsdl" Protocol="file" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="ChallengeService.wsdl" MetadataType="Wsdl" ID="8f3e4ac3-8695-416b-ac20-ca2048dd4ef5" SourceId="1" SourceUrl="file:///C:/Workspace/Development/Entelect/C%23.bot - starter pack/Entelect.BattleCity.Challenge/ChallengeService.wsdl" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo b/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo
new file mode 100644 (file)
index 0000000..6bbf9a9
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.BasicHttpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data name=&quot;ChallengeServiceSoapBinding&quot; /&gt;" bindingType="basicHttpBinding" name="ChallengeServiceSoapBinding" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9090/ChallengePort&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;ChallengeServiceSoapBinding&quot; contract=&quot;ChallengeService.Challenge&quot; name=&quot;ChallengePort&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9090/ChallengePort&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;ChallengeServiceSoapBinding&quot; contract=&quot;ChallengeService.Challenge&quot; name=&quot;ChallengePort&quot; /&gt;" contractName="ChallengeService.Challenge" name="ChallengePort" />
+  </endpoints>
+</configurationSnapshot>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo b/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo
new file mode 100644 (file)
index 0000000..fea37b0
--- /dev/null
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="ClmKNZHJo7S7Ca55qfTBnf2SHrs=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="basicHttpBinding" name="ChallengeServiceSoapBinding">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ChallengeServiceSoapBinding</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>0</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>0</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>0</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>0</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>0</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.Text.Encoding, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.BasicHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpSecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.HttpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.HttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpMessageSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.BasicHttpMessageSecurityElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpMessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="ChallengePort" contract="ChallengeService.Challenge" bindingType="basicHttpBinding" address="http://localhost:9090/ChallengePort" bindingConfiguration="ChallengeServiceSoapBinding">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:9090/ChallengePort</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>basicHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ChallengeServiceSoapBinding</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ChallengeService.Challenge</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ChallengePort</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/compile.bat b/Entelect.BattleCity.Challenge/compile.bat
new file mode 100644 (file)
index 0000000..4f3d152
--- /dev/null
@@ -0,0 +1 @@
+MSBuild.exe /property:Configuration=Release Entelect.BattleCity.Challenge.csproj
\ No newline at end of file
diff --git a/Entelect.BattleCity.Challenge/start.bat b/Entelect.BattleCity.Challenge/start.bat
new file mode 100644 (file)
index 0000000..521c376
--- /dev/null
@@ -0,0 +1 @@
+"bin/Release/Entelect.BattleCity.Challenge.exe" %1
\ No newline at end of file