async void DelayedStart(Init init)
        {
            log.Info("InitStart");
            var time = init.StartTime / 1000f;

            log.Info("1");
            await Task.Delay(init.StartTime);

            log.Info(time.ToString());
            Running = true;
            log.Info("Started");
            InitReceived?.Invoke(this, init);
        }
Пример #2
0
        private void NetworkOnDataReceived(byte[] rawData)
        {
            var data = Compressor.Decompress(rawData);

            var reader     = new Deserializer(data);
            var messageTag = (MessageTag)reader.GetByte();

            switch (messageTag)
            {
            case MessageTag.Init:
                var paket = new Init();
                paket.Deserialize(reader);
                InitReceived?.Invoke(this, paket);
                break;

            case MessageTag.Input:
                var tick          = reader.GetUInt() + reader.GetByte(); //Tick + LagCompensation
                var countCommands = reader.GetInt();
                var actorId       = reader.GetByte();
                var commands      = new ICommand[countCommands];
                for (var i = 0; i < countCommands; i++)
                {
                    var tag = reader.GetUShort();
                    if (!_commandFactories.ContainsKey(tag))
                    {
                        continue;
                    }

                    var newCommand = (ICommand)Activator.CreateInstance(_commandFactories[tag]);
                    newCommand.Deserialize(reader);
                    commands[i] = newCommand;
                }


                base.Enqueue(new Input(tick, actorId, commands));
                break;
            }
        }
Пример #3
0
        private void OnDataReceived(byte[] data)
        {
            data = Compressor.Decompress(data);

            var reader     = new Deserializer(data);
            var messageTag = (MessageTag)reader.GetByte();

            switch (messageTag)
            {
            case MessageTag.StartSimulation:
                var init = new Init();
                init.Deserialize(reader);
                InitReceived?.Invoke(init);
                break;

            case MessageTag.Input:
                var commanderId   = reader.GetByte();
                var frameNumber   = reader.GetUInt();
                var countCommands = reader.GetInt();
                var commands      = new ICommand[countCommands];
                for (var i = 0; i < countCommands; i++)
                {
                    var tag = reader.GetUShort();

                    if (_commandFactories.ContainsKey(tag))
                    {
                        var newCommand = _commandFactories[tag].Invoke();
                        newCommand.Deserialize(reader);
                        commands[i] = newCommand;
                    }
                }

                base.Insert(frameNumber, commanderId, commands);
                break;
            }
        }