예제 #1
0
        public virtual bool ProcessTick(NetMessageTick msg)
        {
            NetChannel.SetRemoteFramerate(msg.HostFrameTime, msg.HostFrameTimeStdDeviation);

            // TODO: Set client tick count
            // TODO: Set server tick count

            // TODO: return GetServerTickCount() > 0
            return(true);
        }
예제 #2
0
        public override bool ProcessTick(NetMessageTick msg)
        {
            var tick = msg.Tick;

            // TODO: Set clock server tick
            // TODO: Store remembered server tick time -> tick * IntervalPerTick

            NetChannel.SetRemoteFramerate(msg.HostFrameTime, msg.HostFrameTimeStdDeviation);
            return(true);
        }
예제 #3
0
        public virtual void SpawnPlayer()
        {
            var tick = new NetMessageTick(Server.GetTick(), Program.HostFrametimeUnbounded, Program.HostFrametimeStdDeviation);

            _netChannel.SendNetMsg(tick, true);

            SignonState = ESignonState.Spawn;
            var signonState = new NetMessageSignonState(SignonState);

            _netChannel.SendNetMsg(signonState);
        }
예제 #4
0
        public virtual void SendSnapshot(ClientFrame frame)
        {
            // do not send same snapshot twice
            if (_lastSnapshot == frame.GetSnapshot())
            {
                NetChannel.Transmit();
                return;
            }

            // if we send a full snapshot (no delta-compression) before, wait until client
            // received and acknowledge that update. don't spam client with full updates
            if (_forceWaitForTick > 0)
            {
                NetChannel.Transmit();
                return;
            }

            var msg = new BufferWrite();

            var deltaFrame = GetDeltaFrame(_deltaTick);

            if (deltaFrame == null)
            {
                // We need to send a full update and reset the instanced baselines
                OnRequestFullUpdate();
            }

            var tickmsg = new NetMessageTick(frame.TickCount, Program.HostFrametimeUnbounded, Program.HostFrametimeStdDeviation);

            tickmsg.WriteToBuffer(msg);

            // send entity update, delta compressed if deltaFrame != NULL
            Server.WriteDeltaEntities(this, frame, deltaFrame, msg);

            var maxTempEnts = 255;

            Server.WriteTempEntities(this, frame.GetSnapshot(), _lastSnapshot, msg, maxTempEnts);

            _lastSnapshot = frame.GetSnapshot();

            if (NetChannel == null)
            {
                _deltaTick = frame.TickCount;
                return;
            }

            bool sendOk;

            if (deltaFrame == null)
            {
                sendOk = NetChannel.SendData(msg);
                sendOk = sendOk && NetChannel.Transmit();

                // remember this tickcount we send the reliable snapshot
                // so we can continue sending other updates if this has been acknowledged
                _forceWaitForTick = frame.TickCount;
            }
            else
            {
                sendOk = NetChannel.SendDatagram(msg) > 0;
            }

            if (!sendOk)
            {
                Disconnect("Error! Couldn't send snapshot");
            }
        }
예제 #5
0
 public bool ProcessTick(NetMessageTick msg)
 {
     _netChannel.SetRemoteFramerate(msg.HostFrameTime, msg.HostFrameTimeStdDeviation);
     return(UpdateAcknowledgedFramecount(msg.Tick));
 }