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(); }
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); }
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; }
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); } }
public void EncryptClientData(byte[] data, int offset, int size) { ClientToServer.ProcessBytes(data, offset, size, data, offset); }
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); }
public void TerminateFromClient(Exception ex = null) { ClientToServer.CompleteWriter(ex); }