private void HandleAsyncClient(IAsyncResult res)
        {
            _RAN = true;
            StartAccept();
            TcpClient client = _LISTENER.EndAcceptTcpClient(res);
            NetworkStream stream = client.GetStream();

            Log("[SERVER] New connection obtained from " + client.Client.RemoteEndPoint, Color.Magenta);
            try
            {
                if (stream.DeSerialize<GameRequest>().Player.PlayerID == PlayerID.Player1)
                    Log("[SERVER] Stream successfully retrieved from client. Assigned Player ID: Player1", Color.Magenta);
                else if (stream.DeSerialize<GameRequest>().Player.PlayerID == PlayerID.Player2)
                    Log("[SERVER] Stream successfully retrieved from client. Assigned Player ID: Player2", Color.Magenta);
                else
                    Log("[SERVER] Stream successfully retrieved from client.", Color.Magenta);
            }
            catch (System.IO.IOException ex) { }

            while (true)
            {
                StreamArgs myArgs = new StreamArgs(stream, false);
                try
                {
                    if (stream.DeSerialize<GameRequest>().Player.PlayerID == PlayerID.Player1)
                        myArgs.Player = "Player1";
                    if (stream.DeSerialize<GameRequest>().Player.PlayerID == PlayerID.Player2)
                        myArgs.Player = "Player2";
                } catch (System.IO.IOException ex) { }
                OnStream(this, myArgs);
                if (myArgs.Canceled)
                {
                    Log("[SERVER] Closing connection to: " + client.Client.RemoteEndPoint, Color.Magenta);
                    stream.Close();
                    client.Close();
                    break;
                }
            }
        }
Exemple #2
0
        public static void StreamHandler(object a, StreamArgs e)
        {
            NetworkStream stream = e.Stream;

            try
            {
                GameRequest sq = stream.DeSerialize <GameRequest>();
                if (sq.MapNumber > mapNumber)
                {
                    Debug.WriteLine("yes: " + mapNumber + " ; " + sq.MapNumber);
                    mapNumber = sq.MapNumber;
                    mapName   = "level" + mapNumber;
                    mapArray  = loader.GetMapCharArray(mapName);
                }
                if (sq.Player.PlayerID == PlayerID.Player1)
                {
                    player1Y = sq.y;
                    player1X = sq.x;
                    GameRequest gR = new GameRequest {
                        Player = new Player {
                            PlayerID = PlayerID.Player2
                        }, x = player2X, y = player2Y, Running = true, MapName = mapName, Map = mapArray, MapNumber = mapNumber
                    };
                    Debug.WriteLine(sq.MapNumber);
                    gR.Serialize <GameRequest>(stream);
                }
                if (sq.Player.PlayerID == PlayerID.Player2)
                {
                    player2Y = sq.y;
                    player2X = sq.x;
                    GameRequest gR = new GameRequest {
                        Player = new Player {
                            PlayerID = PlayerID.Player1
                        }, x = player1X, y = player1Y, Running = true, MapName = mapName, Map = mapArray, MapNumber = mapNumber
                    };
                    Debug.WriteLine(sq.MapNumber);
                    gR.Serialize <GameRequest>(stream);
                }
                e.Canceled = false;
            }
            catch (Exception ex)
            {
                if (!e.Canceled)
                {
                    writer.Error(e.Player + " : Caught error deserializing stream or reading SpecialRequest object.");
                }
                e.Canceled = true;
            }
        }