public PlayerLogoutMessage(Player player, PlayerLogout logout)
        {
            Player = player;
            Logout = logout;

            Info = $"Team {Player.TeamOrdinal} player LOGOUT: [{Player.OutfitAlias}] {Player.NameDisplay} ({Player.Id})";
        }
Пример #2
0
        public void Stop()
        {
            running = false;
            PlayerLogout logout = new PlayerLogout();

            logout.authtoken = authtoken;
            logout.playerId  = playerId;
            ClientMessage message = CreateClientMessage();

            message.playerLogout = logout;
            byte[] bytes = Serialize(message);
            udpClient.Send(bytes, bytes.Length, host, port);
            udpClient.Close();
        }
        private async Task Process(PlayerLogoutPayload payload)
        {
            bool updateCharacter;

            using (var factory = _dbContextHelper.GetFactory())
            {
                var dbContext = factory.GetDbContext();

                try
                {
                    var dataModel = new PlayerLogout
                    {
                        CharacterId = payload.CharacterId,
                        Timestamp   = payload.Timestamp,
                        WorldId     = payload.WorldId
                    };

                    dbContext.PlayerLogouts.Add(dataModel);
                    await dbContext.SaveChangesAsync();
                }
                catch (Exception)
                {
                    //Ignore
                }

                var lastLoginTime = dbContext.PlayerLogins
                                    .Where(l => l.CharacterId == payload.CharacterId)
                                    .OrderByDescending(l => l.Timestamp)
                                    .Select(l => l.Timestamp)
                                    .FirstOrDefault();

                updateCharacter = (lastLoginTime != default && (payload.Timestamp - lastLoginTime) > TimeSpan.FromMinutes(5));
            }

            if (updateCharacter)
            {
                await _characterService.UpdateCharacterAsync(payload.CharacterId);
            }
        }
Пример #4
0
        private void Stop()
        {
            try
            {
                if (connected)
                {
                    connected = false;

                    if (PlayerLogout != null)
                    {
                        PlayerLogout.Invoke(this, new EventArgs());
                    }
                }

                if (loginClientTcp != null)
                {
                    loginClientTcp.Stop();
                }

                if (clientSocket != null)
                {
                    clientSocket.Close();
                }

                if (clientStream != null)
                {
                    clientStream.Close();
                }

                if (serverTcp != null)
                {
                    serverTcp.Close();
                }
            }
            catch (Exception ex)
            {
                WriteDebug(ex.ToString());
            }
        }