/* * * Player sends KE after placing a piece on the Goal Area notifying others about discoverd goal/non-goal */ private static void SendKnowledgeExchange() { /* sends authorise */ foreach (string p in Player.Mates) { PlayerRequestHandler.sendAuthorizeKnowledgeExchange(socket, Player.ID, p); } /* sends data */ foreach (string p in Player.Mates) { string json = PlayerRequestHandler.stringKnowledgeExchangeSend(socket, Player, p); JObject magic = JObject.Parse(json); JField jField = new JField { x = Player.X, y = Player.Y }; jField.value = new JFieldValue(); jField.value.manhattanDistance = null; jField.value.contains = "goal"; jField.value.timestamp = GetTimestamp().ToString(); jField.value.userGuid = null; var jArray = new List <JField>(); jArray.Clear(); jArray.Add(jField); magic["fields"] = (JArray)JToken.FromObject(jArray); Broadcast(socket, JsonConvert.SerializeObject(magic)); } Player.KnowledgeExchange = false; return; }
private static void ConnectCallback(IAsyncResult ar) { try { Socket client = (Socket)ar.AsyncState; client.EndConnect(ar); Console.WriteLine("Socket connected to {0}", client.RemoteEndPoint.ToString()); connectDone.Set(); // Request to Join the game PlayerRequestHandler.sendJoinGame(socket); // Response to join the game Receive(); // Receive BeginGame message Receive(); Console.WriteLine("Player begins the game"); } catch (Exception e) { Console.WriteLine(e.ToString()); } }
private static void SendPlacePiece() { // send DestroyPiece action PlayerRequestHandler.sendPlacePiece(socket); // After every send command, player expect the response // Receive() is called at the end of Send() method // use ctrl+F to find lable RSP_LBL }
private static void SendMove(string direction) { Player.ApplyiedDirection = direction; // Send Move action PlayerRequestHandler.sendMove(socket, direction); // Receive Move Reponse // Receive(); check Send() method, it calls Receive() // use ctrl+F to find lable RSP_LBL }
private static void AnalyzeMessage(string json) { dynamic magic = JsonConvert.DeserializeObject(json); string action = magic.action; switch (action.ToLower()) { case "start": { ReadStartGame(json); // Send Discover as soon as the game begins, // so player knows something... could be move later somewhere else... Player.SendDiscover = true; SendDecision(Player.MakeMove()); break; } case "state": { ReadDiscover(json); SendDecision(Player.MakeMove()); break; } case "move": { // Nothing is ready for this stage, but once "state" is working successfully, the rest would be easier ReadMove(json); Player.SendDiscover = true; SendDecision(Player.MakeMove()); break; } case "pickup": { ReadPickup(json); SendDecision(Player.MakeMove()); break; } case "test": { //Whenever ReadTestPiece reads false from test response, it resends TestPiece again ReadTestPiece(json); SendDecision(Player.MakeMove()); break; } case "destroy": { ReadDestroyPiece(json); SendDecision(Player.MakeMove()); break; } case "place": { ReadPlacePiece(json); Player.Decision decision = Player.MakeMove(); SendDecision(decision); if (decision == Player.Decision.KNOWLEDGE_EXCHANGE) { Receive(); } break; } case "exchange": { // Receive Authorize Knowledege Exchange // Accept it PlayerRequestHandler.sendAcceptKnowledgeExchange(socket, Player.ID); break; } case "send": { // Read KE data ReadKnowledgeExchangeSend(json); SendDecision(Player.MakeMove()); break; } case "end": { ReadGameOver(json); break; } default: break; } // row column for (int i = Player.BoardHeight - 1; i >= 0; i--) // row { string line = "" + i + ". "; for (int j = 0; j < Player.BoardWidth; j++) { // col Console.Write("" + Player.Board[i, j] + " "); line += " "; } Console.WriteLine(line); } }