Esempio n. 1
0
        private static void Connect(String server)
        {
            try
            {
                Int32             port            = 1239;
                TcpClient         client          = new TcpClient(server, port);
                NetworkStream     stream          = client.GetStream();
                BinaryFormatter   binaryFormatter = new BinaryFormatter();
                GameObjectFactory factory         = new GameObjectFactory();

                ClientToServer data = new ClientToServer()
                {
                    RequestType = Request.Initial,
                };

                binaryFormatter.Serialize(stream, data);

                ((List <Shared.Engine.GameObject>)binaryFormatter.Deserialize(stream)).ForEach(gameObject => factory.Create(gameObject).Insantiate());

                Console.WriteLine("Spawned");

                Thread.Sleep(7000);

                // stream.Close();
                // throw new Exception("sss");
                // client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e);
            }
            Console.Read();
        }
Esempio n. 2
0
        internal EventRouter()
        {
            ClientToServerCallbacks = new Dictionary <string, List <Action <NetworkPlayer, string> > >();
            ServerToClientCallbacks = new Dictionary <string, List <Action <NetworkPlayer, string> > >();
            BroadcastAllCallbacks   = new Dictionary <string, List <Action <NetworkPlayer, string> > >();

            ClientToServer.Subscribe(ClientToServerEventReceived);
            ServerToClient.Subscribe(ServerToClientEventReceived);
            BroadcastAll.Subscribe(BroadcastAllEventReceived);
        }
Esempio n. 3
0
        public void SetKey(byte[] key)
        {
            var sha1 = new SHA1CryptoServiceProvider();

            byte[] sha1Key  = sha1.ComputeHash(key);
            var    keyParam = new KeyParameter(sha1Key);

            ClientToServer.Init(true, keyParam);
            ServerToClient.Init(false, keyParam);
            Initialized = true;
        }
Esempio n. 4
0
        static void Main()
        {
            DateTime  current = DateTime.Now;
            GameState game    = new GameState(new List <Player>());

            controls   = new Dictionary <long, Controls>();
            players    = new Dictionary <long, Player>();
            lastUpdate = DateTime.MinValue;

            NetPeerConfiguration config = new NetPeerConfiguration("sick_game");

            config.Port = Int16.Parse(System.Environment.GetEnvironmentVariable("PORT"));
            // For some reason this does not work when ConnectionApproval is enabled
            // config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
            server = new NetServer(config);
            server.Start();
            NetIncomingMessage msg;

            while (true)
            {
                while ((msg = server.ReadMessage()) != null)
                {
                    switch (msg.MessageType)
                    {
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    case NetIncomingMessageType.ErrorMessage:
                        Console.WriteLine(msg.ReadString());
                        break;

                    case NetIncomingMessageType.StatusChanged:
                        NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();
                        Console.WriteLine("Connection change");

                        string reason = msg.ReadString();
                        Console.WriteLine(NetUtility.ToHexString(msg.SenderConnection.RemoteUniqueIdentifier) + " " + status + ": " + reason);

                        if (status == NetConnectionStatus.Connected)
                        {
                            // Create new controls for person
                            var c = new Controls();
                            controls[msg.SenderConnection.RemoteUniqueIdentifier] = c;

                            // Add player to game
                            Player p = new Player(c, 32, Color.Red, false, false);
                            players[msg.SenderConnection.RemoteUniqueIdentifier] = p;
                            game.AddPlayer(p);

                            // Inform new player of other players in the game
                            NetOutgoingMessage om1 = server.CreateMessage();
                            om1.Write((byte)ServerToClient.NewPlayers);

                            // Encode player position and velocity
                            // Number of players
                            om1.Write(1);
                            // Player identifier
                            om1.Write(msg.SenderConnection.RemoteUniqueIdentifier);
                            // Player encoding
                            EncodePlayer(om1, p);

                            List <NetConnection> all = server.Connections;    // get copy

                            // Remove the sender from recipients
                            all.Remove(msg.SenderConnection);


                            // Send the update to the clients
                            if (all.Count > 0)
                            {
                                server.SendMessage(om1, all, NetDeliveryMethod.ReliableOrdered, 0);
                            }

                            // Inform other player of all new players
                            NetOutgoingMessage om2 = server.CreateMessage();
                            om2.Write((byte)ServerToClient.NewPlayers);

                            // Write the number of players
                            om2.Write(players.Count);
                            // Encode each player
                            foreach (var item in players)
                            {
                                om2.Write(item.Key);
                                EncodePlayer(om2, item.Value);
                                Player pl = item.Value;
                            }
                            server.SendMessage(om2, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                        }
                        break;

                    case NetIncomingMessageType.Data:
                        // Message type sent from client
                        ClientToServer type = (ClientToServer)msg.ReadByte();
                        // Console.WriteLine(msg.SenderConnection.RemoteUniqueIdentifier);

                        switch (type)
                        {
                        case ClientToServer.UpdateControls:
                            // Prepare the response message
                            NetOutgoingMessage om = server.CreateMessage();

                            // Response message type
                            om.Write((byte)ServerToClient.UpdateControls);

                            // Id of the player whose controls changed
                            om.Write(msg.SenderConnection.RemoteUniqueIdentifier);

                            // Fetch the controls of the required player
                            Controls control = controls[msg.SenderConnection.RemoteUniqueIdentifier];

                            // Read control to be updated
                            DecodeControls(msg, control);
                            EncodeControls(om, control);

                            // TODO: add a timestamp to the message

                            // Send the update to all clients
                            server.SendMessage(om, server.Connections, NetDeliveryMethod.ReliableOrdered, 0);
                            break;

                        // case ClientToServer.StartGame:
                        //     // For each user create a player instance
                        //     break;
                        default:
                            Console.WriteLine("Unknown connection code");
                            break;
                        }

                        break;

                    default:
                        Console.WriteLine("Unhandled type: " + msg.MessageType);
                        break;
                    }
                    server.Recycle(msg);
                    if (server.Connections.Count > 0 && (DateTime.Now - lastUpdate).TotalMilliseconds > updateInterval)
                    {
                        lastUpdate = DateTime.Now;
                        NetOutgoingMessage om = server.CreateMessage();
                        om.Write((byte)ServerToClient.UpdatePlayers);
                        om.Write(players.Count);
                        foreach (var kp in players)
                        {
                            om.Write(kp.Key);
                            EncodePlayer(om, kp.Value);
                        }
                        server.SendMessage(om, server.Connections, NetDeliveryMethod.ReliableOrdered, 0);
                    }
                }
                DateTime now     = DateTime.Now;
                float    elapsed = (float)(current - now).TotalSeconds;
                current = now;
                game.Update(elapsed);
            }
        }
Esempio n. 5
0
 public void EncryptClientData(byte[] data, int offset, int size)
 {
     ClientToServer.ProcessBytes(data, offset, size, data, offset);
 }
Esempio n. 6
0
        protected override void Update(GameTime gameTime)
        {
            if (Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            NetIncomingMessage msg;

            while ((msg = server.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                case NetIncomingMessageType.VerboseDebugMessage:
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.WarningMessage:
                case NetIncomingMessageType.ErrorMessage:
                    Console.WriteLine(msg.ReadString());
                    break;

                case NetIncomingMessageType.StatusChanged:
                    NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();
                    Console.WriteLine("Connection change");

                    string reason = msg.ReadString();
                    Console.WriteLine(NetUtility.ToHexString(msg.SenderConnection.RemoteUniqueIdentifier) + " " + status + ": " + reason);

                    if (status == NetConnectionStatus.Connected)
                    {
                        // Create new controls for person
                        var c = new Controls();
                        controls[msg.SenderConnection.RemoteUniqueIdentifier] = c;

                        // Add player to game
                        Player p = new Player(c, 32, Color.Red, false, false);
                        players[msg.SenderConnection.RemoteUniqueIdentifier] = p;
                        game.AddPlayer(p);

                        // Inform new player of other players in the game
                        NetOutgoingMessage om1 = server.CreateMessage();
                        om1.Write((byte)ServerToClient.NewPlayers);

                        // Encode player position and velocity
                        // Number of players
                        om1.Write(1);
                        // Player identifier
                        om1.Write(msg.SenderConnection.RemoteUniqueIdentifier);
                        // Player encoding
                        EncodePlayer(om1, p);

                        List <NetConnection> all = server.Connections;    // get copy

                        // Remove the sender from recipients
                        all.Remove(msg.SenderConnection);


                        // Send the update to the clients
                        if (all.Count > 0)
                        {
                            server.SendMessage(om1, all, NetDeliveryMethod.ReliableOrdered, 0);
                        }

                        // Inform other player of all new players
                        NetOutgoingMessage om2 = server.CreateMessage();
                        om2.Write((byte)ServerToClient.NewPlayers);

                        // Write the number of players
                        om2.Write(players.Count);
                        // Encode each player
                        foreach (var item in players)
                        {
                            om2.Write(item.Key);
                            EncodePlayer(om2, item.Value);
                            Player pl = item.Value;
                        }
                        server.SendMessage(om2, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                    }
                    break;

                case NetIncomingMessageType.Data:
                    // Message type sent from client
                    ClientToServer type = (ClientToServer)msg.ReadByte();
                    // Console.WriteLine(msg.SenderConnection.RemoteUniqueIdentifier);

                    switch (type)
                    {
                    case ClientToServer.UpdateControls:
                        // Prepare the response message
                        NetOutgoingMessage om = server.CreateMessage();

                        // Response message type
                        om.Write((byte)ServerToClient.UpdateControls);

                        // Id of the player whose controls changed
                        om.Write(msg.SenderConnection.RemoteUniqueIdentifier);

                        // Fetch the controls of the required player
                        Controls control = controls[msg.SenderConnection.RemoteUniqueIdentifier];

                        // Read control to be updated
                        DecodeControls(msg, control);
                        EncodeControls(om, control);

                        // TODO: add a timestamp to the message

                        // Send the update to all clients
                        server.SendMessage(om, server.Connections, NetDeliveryMethod.ReliableOrdered, 0);
                        break;

                    // case ClientToServer.StartGame:
                    //     // For each user create a player instance
                    //     break;
                    default:
                        Console.WriteLine("Unknown connection code");
                        break;
                    }

                    break;

                default:
                    Console.WriteLine("Unhandled type: " + msg.MessageType);
                    break;
                }
                server.Recycle(msg);
            }
            // Console.WriteLine((DateTime.Now - lastUpdate).TotalMilliseconds > updateInterval);
            if (server.Connections.Count > 0 && (DateTime.Now - lastUpdate).TotalMilliseconds > updateInterval)
            {
                lastUpdate = DateTime.Now;
                NetOutgoingMessage om = server.CreateMessage();
                om.Write((byte)ServerToClient.UpdatePlayers);
                om.Write(players.Count);
                foreach (var kp in players)
                {
                    om.Write(kp.Key);
                    EncodePlayer(om, kp.Value);
                }
                server.SendMessage(om, server.Connections, NetDeliveryMethod.ReliableOrdered, 0);
            }

            // Update game after receiving input changes
            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

            game.Update(elapsed);

            base.Update(gameTime);
        }
Esempio n. 7
0
 public void TerminateFromClient(Exception ex = null)
 {
     ClientToServer.CompleteWriter(ex);
 }