public void OnTopicMessageReceived(string message)
        {
            var result = StaticResources.sevicebusLogs.Where(sbl => sbl == message).FirstOrDefault();

            if (result == null)
            {
                StaticResources.sevicebusLogs.Add(message);

                Transfer transfer = JsonConvert.DeserializeObject <Transfer>(message);

                if (transfer.type == MessageType.Action)
                {
                    GameAction action = JsonConvert.DeserializeObject <GameAction>(transfer.message);
                    Player     player = StaticResources.PlayerList.Where(Speler => Speler.PlayerId == action.playerId).First();

                    if (action.action == PlayerAction.shoot)
                    {
                        if (action.coordinates.field == StaticResources.user.orderNumber)
                        {
                            // shot is directed at my field

                            bool hit      = StaticResources.field.CheckForHit(action.coordinates);
                            bool gameOver = StaticResources.field.CheckForGameOver();

                            sender.SendHitResponseMessage(action.coordinates, hit, gameOver, action.playerId);
                        }

                        // reset timer and increase turn
                        TimerHandler.ResetTime();
                    }
                }

                if (transfer.type == MessageType.Surrender)
                {
                    var settings = new JsonSerializerSettings()
                    {
                        TypeNameHandling = TypeNameHandling.All
                    };
                    SurrenderResponse response = JsonConvert.DeserializeObject <SurrenderResponse>(transfer.message, settings);
                    Player            player   = StaticResources.PlayerList.Where(Speler => Speler.PlayerId == response.playerId).First();

                    // enter code here to display surrender message in log
                    string logEntry = "{player} has surrendered";
                    logEntry = logEntry.Replace("{player}", player.name);
                    WriteMessageToLog(logEntry);

                    // start gameover function
                    HandleGameOver(response.playerId, response.field);
                    // reset timer and increase turn
                    TimerHandler.ResetTime();
                }

                if (transfer.type == MessageType.GameResponse)
                {
                    GameResponse response = JsonConvert.DeserializeObject <GameResponse>(transfer.message);

                    HandleHitResponse(response);
                }
            }
        }
        public void SendSurrenderMessage()
        {
            PlayerField field = new PlayerField()
            {
                fieldNumber = StaticResources.field.fieldNumber,
                hitList     = StaticResources.field.hitList
            };

            foreach (IBoat boat in StaticResources.field.boats)
            {
                field.AddNewBoatToField(boat);
            }

            SurrenderResponse response = new SurrenderResponse()
            {
                playerId = StaticResources.user.PlayerId,
                field    = field
            };

            var indented = Formatting.Indented;
            var settings = new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.All
            };

            string line = JsonConvert.SerializeObject(response, indented, settings);

            ServiceBusHandler.program.topic.SendTopicMessage(line, MessageType.Surrender);
        }
    void ConfirmSurrender()
    {
        SurrenderRequest request = new SurrenderRequest();

        App.Manager.Network.Request("Surrender", request, delegate(IMessage responseData) {
            SurrenderResponse response = (SurrenderResponse)responseData;
            if (response.IsSurrender)
            {
                Common.UI.OpenTips("发起投降");
            }
        });
    }
Exemple #4
0
 public override Response DoWork(string request)
 {
     var workRequest = JsonConvert.DeserializeObject<PeaceRequest>(request);
     var workResponse = new SurrenderResponse();
     if (Server.Games[workRequest.GameID].Act == Act.WaitingOpponent)
     {
         workResponse.Status = Statuses.NoUser;
         return workResponse;
     }
     if (workRequest.From == Server.Games[workRequest.GameID].PlayerWhite.Name)
     {
         Server.Messages.GetOrAdd(Server.Games[workRequest.GameID].PlayerBlack.Name, i => new List<Message>()).Add(MessageSender.OpponentRequestPeace());
         workResponse.Status = Statuses.Ok;
     }
     if (workRequest.From == Server.Games[workRequest.GameID].PlayerBlack.Name)
     {
         Server.Messages.GetOrAdd(Server.Games[workRequest.GameID].PlayerWhite.Name, i => new List<Message>()).Add(MessageSender.OpponentRequestPeace());
         workResponse.Status = Statuses.Ok;
     }
     return workResponse;
 }