Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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()));
                        }
                    }
                }
            }
        }
    private void FixedUpdate()
    {
        time = Time.time;
        if (stateMB.state.tick > 0 && stateMB.state.tick % Constants.TICK_RATE == 0)
        {
            var deltaState = new TransformDeltaState();
            deltaState.Create(previousState, stateMB.state);
            deltaStateHistory.Add(deltaState);

            if (!StateFile.IsEmpty(Path))
            {
                StateFile.Write(Path, Constants.DELIMITER);
            }

            var bytes = deltaState.ToBytes().ToArray();
            StateFile.Write(Path, bytes);

            previousState.tick = stateMB.state.tick;
            previousState.entities.Clear();
            previousState.entities.AddRange(stateMB.state.entities.Clone());
        }
    }