static void Main(string[] args) { var host = "localhost"; var port = 9999; Console.WriteLine($"This is an example TCP Client. Press any key to connect to tcp://{host}:{port}"); var client = new TCPClient(host, port); client.OnMessage += OnReceive; client.Open(); string input; while ((input = Console.ReadLine()).ToLower() != "quit") { if (input.ToLower() == "state") { var state = new TransformState(); state.tick = simulatedTick++; client.Send(Packet.Create(CommandEnum.StateUpdate, state.ToBytes())); } if (input.ToLower() == "deltastate") { var deltaState = new TransformDeltaState(); deltaState.startStateTick = simulatedTick - 1; deltaState.endStateTick = simulatedTick++; client.Send(Packet.Create(CommandEnum.DeltaStateUpdate, deltaState.ToBytes())); } } client.Close(); }
private static void OnReceiveMessage(object sender, Message <Socket> e) { var bytes = new ByteQueue(e.bytes); var command = (CommandEnum)bytes.GetByte(); if (command == CommandEnum.Input) { // Receive Input: } if (command == CommandEnum.StateUpdate) { var state = new TransformState(); state.FromBytes(bytes); Console.WriteLine($"TCPClient {e.client.Handle}: {state}"); var existingState = stateHistory.GetState(state.tick); if (existingState != null) { existingState.Clear(); existingState.entities.AddRange(state.entities); } else { stateHistory.Add(state); foreach (var client in clients) { server.Send(client, Packet.Create(CommandEnum.StateUpdate, state.ToBytes())); } } } if (command == CommandEnum.DeltaStateUpdate) { var deltaState = new TransformDeltaState(); deltaState.FromBytes(bytes); Console.WriteLine($"TCPClient {e.client.Handle}: {deltaState}"); var startState = stateHistory.GetState(deltaState.startStateTick); if (startState != null) { var endState = (TransformState)deltaState.GenerateEndState(startState); Console.WriteLine($"End State Generated: {endState}"); var existingState = stateHistory.GetState(endState.tick); if (existingState != null) { existingState.Clear(); existingState.entities.AddRange(endState.entities); } else { stateHistory.Add(endState); foreach (var client in clients) { server.Send(client, Packet.Create(CommandEnum.StateUpdate, endState.ToBytes())); } } } } }