static public void SendTurnRequest(int action, int system, int player, int playerarmy) { if (NetworkHandler == null) { return; } if (Server) { // Server host has no need to confirm, skip straight to sending the confirmed turns to all clients SendTurnConfirm(action, system, player, playerarmy); } else { // Client sends to server to confirm action NetworkTurnType turn = new NetworkTurnType(); { turn.Action = action; turn.System = system; turn.Player = player; turn.Army = playerarmy; } string turndata = JsonConvert.SerializeObject(turn); foreach (NetConnection connection in NetworkHandler.Connections) { SendString(connection, MESSAGE_TURN_REQUEST, turndata); } } }
static public void SendTurnConfirm(int action, int system, int player, int playerarmy) { // Extra logic on server host to also confirm the turn on their own game client if (Server) { Helper.GetGameScene().DoTurn(action, system, player, playerarmy); } NetworkTurnType turn = new NetworkTurnType(); { turn.Action = action; turn.System = system; turn.Player = player; turn.Army = playerarmy; } string turndata = JsonConvert.SerializeObject(turn); foreach (NetConnection connection in NetworkHandler.Connections) { SendString(connection, MESSAGE_TURN_CONFIRM, turndata); } // TEMP Testing if (action == Helper.ACTION_WAR) { Helper.GetGameScene().RewardSelection(player); } }
static private void ParseMessage_Data(NetIncomingMessage message) { // Handle custom messages int id = message.ReadInt32(); string datastr; string cardname; // Parse message switch (id) { case MESSAGE_INITIAL: datastr = message.ReadString(); ((Scene_Game)Scene.Instance).LoadFromJSON(datastr); break; case MESSAGE_PLAYERID: int playerid = message.ReadInt16(); Program.ThisPlayer = playerid; break; case MESSAGE_TURN_REQUEST: datastr = message.ReadString(); NetworkTurnType turn = JsonConvert.DeserializeObject <NetworkTurnType>(datastr); SendTurnConfirm(turn.Action, turn.System, turn.Player, turn.Army); break; case MESSAGE_TURN_CONFIRM: datastr = message.ReadString(); NetworkTurnType turnconfirm = JsonConvert.DeserializeObject <NetworkTurnType>(datastr); Helper.GetGameScene().DoTurn(turnconfirm.Action, turnconfirm.System, turnconfirm.Player, turnconfirm.Army); break; case MESSAGE_CARD_DISPLAYWIN: string[] cards = new string[3]; JObject[] cards_json = new JObject[3]; { for (int card = 0; card < 3; card++) { cards[card] = message.ReadString(); cards_json[card] = (JObject)JsonConvert.DeserializeObject(cards[card]); } } Helper.GetGameScene().RewardSelection_ReceiveCards(cards_json); break; case MESSAGE_CARD_TRYPICK: cardname = message.ReadString(); // Check against cards originally sent bool real = Helper.GetGameScene().CheckChosenCard(cardname); if (!real) { cardname = ""; Console.WriteLine("Card denied by server."); } SendCardConfirm(message.SenderConnection, cardname); break; case MESSAGE_CARD_CONFIRM: cardname = message.ReadString(); Helper.GetGameScene().PickCard(cardname); break; default: break; } }