public void TestSerialzation() { //Clientside create command, send to server var writer = new LiteNetLibSerializer(); new TestCommand(); //Serverside, gather input var writer2 = new LiteNetLibSerializer(); var packer = new InputPacker(); packer.AddInput(writer.Data); packer.Pack(writer2); //Clientside, receive input var reader = new LiteNetLibDeserializer(); reader.SetSource(writer2.Data); var messageTag = reader.GetByte(); messageTag.ShouldBe((byte)MessageTag.Frame); var commands = new InputParser(r => new TestCommand()).DeserializeInput(reader); commands.ShouldNotBeNull(); commands.Length.ShouldBe(1); commands.First().ShouldBeOfType <TestCommand>(); }
public void Open(int roomSize) { _listener.ConnectionRequestEvent += request => { if (_server.PeersCount < roomSize) { request.AcceptIfKey(ClientKey); } else { request.Reject(); } }; _listener.PeerConnectedEvent += peer => { if (_server.PeersCount == roomSize) { Console.WriteLine("Room is full, starting new simulation..."); new Thread(Loop) { IsBackground = true }.Start(); } else { Console.WriteLine(_server.PeersCount + " / " + roomSize + " players have connected."); } }; _listener.NetworkReceiveEvent += (peer, reader, method) => { var messageTag = (MessageTag)reader.GetByte(); switch (messageTag) { case MessageTag.Input: _inputPacker?.AddInput(reader.GetRemainingBytes()); break; case MessageTag.Checksum: _deserializer.SetSource(reader.GetRemainingBytes()); var pkt = new HashCode(); pkt.Deserialize(_deserializer); if (!_hashCodes.ContainsKey(pkt.FrameNumber)) { _hashCodes[pkt.FrameNumber] = pkt.Value; } else { Console.WriteLine((_hashCodes[pkt.FrameNumber] == pkt.Value ? "HashCode valid" : "Desync") + ": " + pkt.Value); } break; } }; _listener.PeerDisconnectedEvent += (peer, info) => { if (_server.ConnectedPeerList.Count == 0) { Console.WriteLine("All players left, stopping current simulation..."); Running = false; } else { Console.WriteLine(_server.PeersCount + " players remaining."); } }; _server.Start(ServerPort); Console.WriteLine("Server started. Waiting for " + roomSize + " players..."); }