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; }
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); } } }