Ejemplo n.º 1
0
        private void OnClientConnect(IStarProxy proxy, IClientConnectPacket packet)
        {
            Character ch = _db.Characters.SingleOrDefault(p => p.Uuid == packet.Uuid.Id);
            bool update = ch != null;

            if (!update)
            {
                ch = new Character();
                _db.Characters.Add(ch);
            }

            ch.Name = packet.PlayerName;
            ch.Uuid = packet.Uuid.Id;

            string ip = ((IPEndPoint)proxy.ClientSocket.RemoteEndPoint).Address.ToString();

            CharacterIp chIp = _db.CharacterIps.SingleOrDefault(p => p.Address == ip && p.CharacterId == ch.CharacterId);

            if (chIp == null)
            {
                _db.CharacterIps.Add(new CharacterIp
                {
                    Character = ch,
                    Address = ip
                });
            }

            if (update)
                _db.Update(ch);

            _db.SaveChanges();

            proxy.Character = ch;
        }
Ejemplo n.º 2
0
        public void OnClientConnect(IStarProxy proxy, IClientConnectPacket packet)
        {
            if (!string.IsNullOrEmpty(packet.Account))
            {
                User user = _db.Users.SingleOrDefault(p => p.Username == packet.Account);

                if (user != null)
                {
                    Ban ban = _db.Bans.SingleOrDefault(p => p.UserId == user.UserId);

                    if (ban != null && ban.Active)
                    {
                        IConnectFailurePacket failPacket = _star.Resolve<IConnectFailurePacket>();
                        failPacket.Reason = ban.Reason;

                        proxy.SendPacket(failPacket, Destination.Client);

                        return;
                    }
                }

                _authenticating[proxy] = new AuthenticatingProxy
                {
                    AccountName = packet.Account,
                    User = user
                };

                packet.Account = string.Empty;
                proxy.ServerPaused = true;

                IHandshakeChallengePacket hChallenge = _star.Resolve<IHandshakeChallengePacket>();

                if (user != null)
                    hChallenge.PasswordSalt = user.PasswordSalt;
                else
                    hChallenge.PasswordSalt = StarSecurity.EmptySalt;

                proxy.SendPacket(hChallenge, Destination.Client);
            }
            else
            {
                Ban ban = _db.Bans.SingleOrDefault(p => p.Character.Uuid == packet.Uuid.Id);

                if (ban != null && ban.Active)
                {
                    IConnectFailurePacket failPacket = _star.Resolve<IConnectFailurePacket>();
                    failPacket.Reason = ban.Reason;

                    proxy.SendPacket(failPacket, Destination.Client);
                }
            }
        }