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); }
/// <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(); } }
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 ); }