protected virtual void OnClientPing(int time, string message)
 {
     ClientPing?.Invoke(this, new ClientEventArgs()
     {
         clientPingTime = time, clientPingMessage = message
     });
 }
Пример #2
0
 public void ReportPing(ClientWrapper client)
 {
     if (ClientPing.ContainsKey(client.ClientIdentifier))
     {
         ClientPing[client.ClientIdentifier] = UnixTimeNow();
     }
 }
Пример #3
0
 static bool Prefix(PingsMessage __instance)
 {
     var pings = __instance.m_pings = new ClientPing[16];
     for (int i = 0; i < 16; i++)
         pings[i] = new ClientPing();
     return false;
 }
Пример #4
0
        public async void SendPing()
        {
            var command = new ClientPing()
            {
                timestamp = DateTime.Now.Ticks
            };

            await Send(command);
        }
Пример #5
0
 internal void AddClient(ref ClientWrapper client)
 {
     if (client.ClientIdentifier == -1)
     {
         CurrentIdentifier++;
         client.ClientIdentifier = CurrentIdentifier;
         Clients.Add(CurrentIdentifier, client);
         PacketErrors.Add(CurrentIdentifier, 0);
         ClientPing.Add(CurrentIdentifier, UnixTimeNow());
     }
 }
Пример #6
0
        public static Session Deserialize(string data)
        {
            try
            {
                var session = new Session();

                var nodes = MiniYaml.FromString(data);
                foreach (var node in nodes)
                {
                    var strings = node.Key.Split('@');

                    switch (strings[0])
                    {
                    case "Client":
                        session.Clients.Add(Client.Deserialize(node.Value));
                        break;

                    case "ClientPing":
                        session.ClientPings.Add(ClientPing.Deserialize(node.Value));
                        break;

                    case "GlobalSettings":
                        session.GlobalSettings = Global.Deserialize(node.Value);
                        break;

                    case "Slot":
                        var s = Slot.Deserialize(node.Value);
                        session.Slots.Add(s.PlayerReference, s);
                        break;

                    case "DisabledSpawnPoints":
                        session.DisabledSpawnPoints = FieldLoader.GetValue <HashSet <int> >("DisabledSpawnPoints", node.Value.Value);
                        break;
                    }
                }

                return(session);
            }
            catch (YamlException)
            {
                throw new YamlException("Session deserialized invalid MiniYaml:\n{0}".F(data));
            }
            catch (InvalidOperationException)
            {
                throw new YamlException("Session deserialized invalid MiniYaml:\n{0}".F(data));
            }
        }
Пример #7
0
 private void DoServerTick(object obj, ElapsedEventArgs eventargs)
 {
     foreach (var c in Clients.Values.ToArray())
     {
         if (c != null)
         {
             new KeepAlive(c).Write();
             if (ClientPing.ContainsKey(c.ClientIdentifier))
             {
                 if ((UnixTimeNow() - ClientPing[c.ClientIdentifier]) > 2000)
                 {
                     Globals.DisconnectClient(c, "Ping timeout");
                 }
             }
         }
     }
 }
Пример #8
0
        public static Session Deserialize(string data)
        {
            try
            {
                var session = new Session();

                var nodes = MiniYaml.FromString(data);
                foreach (var node in nodes)
                {
                    var strings = node.Key.Split('@');

                    switch (strings[0])
                    {
                    case "Client":
                        session.Clients.Add(Client.Deserialize(node.Value));
                        break;

                    case "ClientPing":
                        session.ClientPings.Add(ClientPing.Deserialize(node.Value));
                        break;

                    case "GlobalSettings":
                        session.GlobalSettings = Global.Deserialize(node.Value);
                        break;

                    case "Slot":
                        var s = Slot.Deserialize(node.Value);
                        session.Slots.Add(s.PlayerReference, s);
                        break;
                    }
                }

                return(session);
            }
            catch (InvalidOperationException)
            {
                Log.Write("exception", "Session deserialized invalid MiniYaml:\n{0}".F(data));
                throw;
            }
        }
Пример #9
0
        private void DoServerTick(object obj, ElapsedEventArgs eventargs)
        {
            foreach (var c in Clients.Values.ToArray())
            {
                if (c != null)
                {
                    new KeepAlive(c).Write();

                    /*if ((UnixTimeNow() - c.GetLastPing) > 20000)
                     * {
                     *      PacketError(c, new Exception("Ping timeout")); //Register as packet error as client didn't ping for more than 20 seconds.
                     * }*/
                    if (ClientPing.ContainsKey(c.ClientIdentifier))
                    {
                        if ((UnixTimeNow() - ClientPing[c.ClientIdentifier]) > 2000)
                        {
                            PacketError(c, new Exception("Ping timeout"));
                        }
                    }
                }
            }
        }
Пример #10
0
 public static void HandlePing(WorldSession session, ClientPing ping)
 {
     session.Heartbeat.OnHeartbeat();
 }