Ejemplo n.º 1
0
        private BaseResponse Login(int clientId, BasePacket packet)
        {
            PUserLogin pUserLogin = (PUserLogin)packet;

            User user = new User(pUserLogin.UserName, pUserLogin.Password);

            pUserLogin.SessionToken = BasePacket.NewSessionToken();

            Player     player     = Player.Create(user.UserName);
            ShortPoint?startPoint = World.MapFindPlayerStartPoint(player);

            if (!startPoint.HasValue)
            {
                BaseResponse.Throw("Cannot get start point for the player", ECGeneral.ServerError);
                return(null);
            }
            player.Position = startPoint.Value.ToPoint(ConstMap.PIXEL_SIZE);

            lock (_loggedPlayers)
            {
                _loggedPlayers.Add(pUserLogin.SessionToken, player.Id);
            }

            lock (_tcpClients)
            {
                _tcpClients.Add(clientId, pUserLogin.SessionToken);
                _playerClients.Add(player.Id, clientId);
            }

            World.PlayerAdd(pUserLogin.SessionToken, player);

            _validators.RegisterSession(pUserLogin.SessionToken);

            return(new RUserLogin(pUserLogin)
            {
                SessionToken = pUserLogin.SessionToken
            });
        }