private void OnKeepAlive()
        {
            var msgServerPing = new ServerPingMessage()
            {
                ServerTimestamp = TimeSpan.FromTicks(DateTime.UtcNow.Ticks)
            };

            this.SendFrameToClient(FrameType.ServerPing, msgServerPing.Serialize());
            if (this.state.LastKeepAliveUtc + this.clientTimeout < DateTime.UtcNow)
            {
                this.Self.Tell(PoisonPill.Instance);
                this.log.Error($"[{this.Self.Path.Name}] timed out");
                return;
            }
        }
Example #2
0
        /// <summary>Processes the UDP transfer frame.</summary>
        /// <param name="frame">The frame.</param>
        private void ProcessUdpTransferFrame(UdpTransferFrame frame)
        {
            switch (frame.Type)
            {
            case FrameType.ServerAuthenticationRequest:
                var msgAuthenticationRequest = new ServerAuthenticationRequest(frame.MessageBuffer);
                ProcessAuthenticationRequest(msgAuthenticationRequest, this.signingKeyBase64);
                break;

            case FrameType.ServerHello:
                SubscribeToDefaultArea();
                if (OnConnected != null)
                {
                    Thread connected = new Thread(() => OnConnected());
                    connected.Start();
                }
                break;

            case FrameType.ServerPing:
                var msgServerPing = new ServerPingMessage(frame.MessageBuffer);
                var now           = TimeSpan.FromTicks(DateTime.UtcNow.Ticks);
                var cmdClientPong = new ClientPongMessage()
                {
                    ServerRequestTimestamp = msgServerPing.ServerTimestamp, ClientRequestTimestamp = now, ClientResponseTimestamp = now
                };
                ReliableMessaging.OnSendFrame(new UdpTransferFrame(FrameType.ClientPong, cmdClientPong.Serialize()));
                break;

            case FrameType.Message:
                LastMessageReceived = DateTime.Now;
                ReliableMessaging.ProcessMessageFrame(frame);
                break;

            default:
                throw new NotImplementedException(frame.Type.ToString());
            }
        }