Example #1
0
        public bool OnPacketArrival(TimePacket packet, ISet <object> changedSet)
        {
            var tcpPkt = (TcpPacket)packet.Packet;
            var ipPkt  = tcpPkt.ParentPacket as IpPacket;

            if (ipPkt == null) // Only TCP/IP is supported
            {
                return(false);
            }

            // Build SocketTuple
            var socketTuple = new TcpTuple(ipPkt.SourceAddress, tcpPkt.SourcePort, ipPkt.DestinationAddress,
                                           tcpPkt.DestinationPort);

            Debug.WriteLine(socketTuple);

            TcpSeq seq;

            if (!_activeTcpSeqs.TryGetValue(socketTuple, out seq))
            {
                seq = new TcpSeq(socketTuple);
                _activeTcpSeqs[socketTuple] = seq;
            }

            // TODO: Update TcpSeq

            changedSet.Add(seq);

            return(false);
        }
Example #2
0
    /// <summary>
    /// Process TimeSync packet from client
    /// </summary>
    /// <param name="packetId"></param>
    /// <param name="clientTime"></param>
    public void UpdateTime(int packetId, float clientTime)
    {
        TimePacket tp = timePackets.FirstOrDefault(x => x.id == packetId);

        if (tp != default && tp != null)
        {
            float rtt = Time.time - tp.serverTime;
            smoothedRTT = smoothedRTT * 0.8f + rtt * 0.2f;
            float newTimeDiff = Time.time - clientTime - smoothedRTT / 2.0f;
            errorRate = Mathf.Abs(newTimeDiff - timeDiff);
            timeDiff  = newTimeDiff;
        }
        timePackets.Remove(tp);
        packetsLossed += timePackets.RemoveAll(t => t.serverTime < Time.time - 1.0f);
        isReady        = true;
        if (DEBUG)
        {
            Logs();
        }
    }
Example #3
0
        private void ReceiveTime(IRecvPacket packet)
        {
            TimePacket p = (TimePacket)packet;

            World.Interaction.ChatMessage(string.Format("The current server time is {0}:{1}:{2}", p.Hour, p.Minute, p.Second));
        }
 //TimePacket
 private static void HandlePacket(TimePacket packet)
 {
     Time.LoadTime(
         packet.Time, Color.FromArgb(packet.Color.A, packet.Color.R, packet.Color.G, packet.Color.B), packet.Rate
         );
 }