/// <summary>
        /// Удар по врагу.
        /// </summary>
        private static void ReceiveCallbackMyShot(IAsyncResult ar)
        {
            try
            {
                StateObject state  = (StateObject)ar.AsyncState;
                Socket      client = state.workSocket;

                int bytesRead = client.EndReceive(ar);

                state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));

                if (state.sb.Length > 1)
                {
                    response = state.sb.ToString();
                }

                response = response.Remove(response.LastIndexOf(JsonStructInfo.EndOfMessage));

                JObject jObject = null;

                Answer.AnswerTypes type = Answer.AnswerTypes.ShotOfTheEnemy;
                SeaBattleClassLibrary.DataProvider.ShotResult.ShotResultType result = SeaBattleClassLibrary.DataProvider.ShotResult.ShotResultType.Miss;
                Ship ship = null;

                try
                {
                    jObject = JObject.Parse(response);
                }
                catch (JsonReaderException e)
                {
                    Console.WriteLine(e);
                }

                type   = Answer.JsonTypeToEnum((string)jObject[JsonStructInfo.Type]);
                result = SeaBattleClassLibrary.DataProvider.ShotResult.JsonTypeToEnum((string)jObject[JsonStructInfo.Result]);
                ship   = result == SeaBattleClassLibrary.DataProvider.ShotResult.ShotResultType.Kill ?
                         Serializer <Ship> .Deserialize((string)jObject[JsonStructInfo.AdditionalContent]) : null;

                Location location = Serializer <Location> .Deserialize((string)jObject[JsonStructInfo.Content]);

                Game.ShotResult shotResult = Game.ShotResult.Miss;

                if (result != SeaBattleClassLibrary.DataProvider.ShotResult.ShotResultType.Miss)
                {
                    shotResult = result == SeaBattleClassLibrary.DataProvider.ShotResult.ShotResultType.Damage ?
                                 Game.ShotResult.Damage : Game.ShotResult.Kill;
                }

                EnemyGameField.Shot(location, shotResult, ship);
                pingDone.Reset();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Возвращает сообщение об ожидании второго игрока.
        /// </summary>
        public static string AwaitSecondPlayer()
        {
            Answer.AnswerTypes type    = Answer.AnswerTypes.No;
            string             typeStr = Answer.EnumTypeToString(type);

            JObject jObject = new JObject();

            jObject.Add(JsonStructInfo.Type, typeStr);
            jObject.Add(JsonStructInfo.Result, "");

            return(jObject.ToString() + JsonStructInfo.EndOfMessage);
        }
        /// <summary>
        /// Удар по мне.
        /// </summary>
        private static void ReceiveCallbackEnemyShot(IAsyncResult ar)
        {
            try
            {
                StateObject state  = (StateObject)ar.AsyncState;
                Socket      client = state.workSocket;

                int bytesRead = client.EndReceive(ar);

                state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));

                if (state.sb.Length > 1)
                {
                    response = state.sb.ToString();
                }

                response = response.Remove(response.LastIndexOf(JsonStructInfo.EndOfMessage));

                JObject jObject = null;

                Answer.AnswerTypes type = Answer.AnswerTypes.ShotOfTheEnemy;

                try
                {
                    jObject = JObject.Parse(response);
                } catch (JsonReaderException e)
                {
                    Console.WriteLine(e);
                }

                type = Answer.JsonTypeToEnum((string)jObject[JsonStructInfo.Type]);
                Location location = Serializer <Location> .Deserialize((string)jObject[JsonStructInfo.Result]);

                MyGameField.Shot(location);
                pingDone.Reset();
            } catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        /// <summary>
        /// Выбор игры
        /// </summary>
        private async void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ElementEnabled(true);

            IPEndPoint remoteEP = Model.IPEndPoint;
            var        a        = e.AddedItems.ToList();

            string s        = ((e.AddedItems.ToList()[0] as StackPanel).Children[0] as TextBlock).Text;
            string gameName = s.Substring(6, s.IndexOf('\n') - 6);
            Socket socket   = null;

            await Task.Run(() =>
            {
                pingDone.Reset();

                // Create a TCP/IP socket.
                Socket client = new Socket(remoteEP.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                StateObject state = new StateObject();
                state.workSocket  = client;
                state.obj         = gameName;
                socket            = client;

                // Connect to the remote endpoint.
                client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback1), state);
                pingDone.WaitOne();
            });

            Model.PlayerSocket = socket;
            Answer.AnswerTypes dataType = GetAnswerType(response);

            if (dataType == Answer.AnswerTypes.Ok)
            {
                MainPage.MainFrame?.Navigate(typeof(BeginPage), Model);
            }

            ElementEnabled(false);
        }
Ejemplo n.º 5
0
        private void WaitOtherPlayer(Socket socket)
        {
            response = response.Remove(response.LastIndexOf(JsonStructInfo.EndOfMessage));
            Answer.AnswerTypes dataType = GetAnswerType(response);
            StateObject        so       = new StateObject();

            so.workSocket = socket;

            if (dataType == Answer.AnswerTypes.GameReady)
            {
                Answer.AnswerTypes result = Answer.JsonTypeToEnum(GetJsonRequestResult(response));
                Player.CanShot = result == Answer.AnswerTypes.Yes ? true : false;
                MainPage.MainFrame?.Navigate(typeof(GamePage), Player);
                return;
            }
            else
            {
                pingDone.Reset();
                Receive(so);
                pingDone.WaitOne();
                WaitOtherPlayer(socket);
                return;
            }
        }