private void receivingThreadBody()
        {
            while (binaryReader != null && client != null && isAlive)
            {
                String serializedPacket = "";
                while (!serializedPacket.EndsWith(Global.END_OF_PACKET) && isAlive)
                {
                    if (stream.DataAvailable)
                    {
                        serializedPacket += binaryReader.ReadChar();
                    }
                    else
                    {
                        Thread.Sleep(200);
                    }
                }

                if (isAlive)
                {
                    System.Diagnostics.Debug.WriteLine("packet received => deserialization");
                    serializedPacket = serializedPacket.Replace(Global.END_OF_PACKET, "");
                    System.Diagnostics.Debug.WriteLine(serializedPacket);
                    receivedQueue.Enqueue(GamePacketSerialization.deserialize(serializedPacket));
                    System.Diagnostics.Debug.WriteLine("queue size: " + receivedQueue.Count);
                }
            }
        }
        private void sendingThreadBody()
        {
            while (binaryWriter != null && client != null && isAlive)
            {
                if (toSendQueue.Count > 0)
                {
                    GamePacket packet           = (GamePacket)toSendQueue.Dequeue();
                    String     serializedPacket = GamePacketSerialization.serialize(packet) + Global.END_OF_PACKET;
                    for (int i = 0; i < serializedPacket.Length; i++)
                    {
                        binaryWriter.Write(serializedPacket[i]);
                    }
                }

                Thread.Sleep(200);
            }
        }
Example #3
0
        private void ReceivingThreadStart()
        {
            System.Diagnostics.Debug.WriteLine("ReceivingThread started");
            GamePacket packet;

            gameIsEnded = false;
            while (!gameIsEnded)
            {
                Thread.Sleep(250);

                packet = wifiService.receive();
                if (packet != null)
                {
                    System.Diagnostics.Debug.WriteLine(packet.GetType() + " packt received:" + System.Environment.NewLine + GamePacketSerialization.serialize(packet));

                    if (packet.Type == GamePacket.TYPE.WHO_STARTS)
                    {
                        meStartFirst = packet.getWhoStarts() == Global.CLIENT_FIRST;
                        BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShootable(meStartFirst); }));
                    }
                    else if (packet.Type == GamePacket.TYPE.USER_NAME)
                    {
                    }
                    else if (packet.Type == GamePacket.TYPE.SHOT)
                    {
                        BeginInvoke(new MethodInvoker(delegate()
                        {
                            ShotResult result = prevBoard.Shoot(packet.getCoordinates());
                            if (prevBoard.isGameEnded())
                            {
                                wifiService.send(new GamePacket(new GameResult(Global.GAME_RESULT_WINNER)));    // opponent is winner because he sunk all of my ships
                                EndGame(false);
                            }
                            else
                            {
                                wifiService.send(new GamePacket(result));
                                if (!result.isHit() || result.isSunk())
                                {
                                    BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShootable(true); }));
                                }
                            }
                        }));
                    }
                    else if (packet.Type == GamePacket.TYPE.RESULT)
                    {
                        bool result = packet.getShotResult().isHit();
                        BeginInvoke(new MethodInvoker(delegate()
                        {
                            mainBoard.ShotResult(packet.getShotResult());
                            mainBoard.setShootable(result && !packet.getShotResult().isSunk());
                        }));

                        currentTarget = null;
                        if (packet.getShotResult().isSunk())
                        {
                            BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShipSunk(packet.getShotResult().getMatrix()); }));
                        }
                    }
                    else if (packet.Type == GamePacket.TYPE.GAME_RESULT)
                    {
                        BeginInvoke(new MethodInvoker(delegate() { EndGame(packet.getGameResult().isWinner()); }));
                    }
                }
            }
        }