public void RespondToLogin(JamPacket loginPacket) { if (loginPacket.Header.DataType != LoginRequest.DATA_TYPE) { return; } LoginRequest request = new LoginRequest(loginPacket.Data, Serializer); LoginResponse response; try { Account = AccountFactory.Authenticate(request.Username, request.Password, Server.HashFactory); AppSigniture = request.AppSigniture; Server.OnClientIdentified(new JamServer.IdentifiedConnectionEventArgs() { ServerConnection = this, RemoteEndPoint = Client.Client.RemoteEndPoint, Account = Account }); JamServerConnection existingConnection = Server.GetConnection(Account.AccountID); if (existingConnection != null) { Server.OnClientConnectedElsewhere(new JamServer.IdentifiedConnectionEventArgs() { ServerConnection = this, RemoteEndPoint = existingConnection.Client.Client.RemoteEndPoint, Account = existingConnection.Account }); existingConnection.Dispose(); } JamServerConnection appServiceConnection = Server.GetAppServiceConnection(AppSigniture); if (appServiceConnection == null && AppSigniture != Server.AppSigniture) { response = new LoginResponse(LoginResponse.LoginResult.AppOffline, null, Guid.Empty, Serializer); Server.OnClientOfflineAppRequest(new JamServer.IdentifiedConnectionEventArgs() { ServerConnection = this, RemoteEndPoint = Client.Client.RemoteEndPoint, Account = Account }); } else { Guid appServiceID = Guid.Empty; if (appServiceConnection != null) { appServiceID = appServiceConnection.Account.AccountID; } response = new LoginResponse(LoginResponse.LoginResult.Good, Account, appServiceID, Serializer); Server.AddConnection(this); } } catch (AccountFactory.InvalidUsernameException) { response = new LoginResponse(LoginResponse.LoginResult.BadUsername, null, Guid.Empty, Serializer); Server.OnClientInvalidUsername(new JamServer.ConnectionEventArgs() { ServerConnection = this, RemoteEndPoint = Client.Client.RemoteEndPoint }); } catch (AccountFactory.InvalidAccessCodeException) { response = new LoginResponse(LoginResponse.LoginResult.BadPassword, null, Guid.Empty, Serializer); Server.OnClientInvalidPassword(new JamServer.ConnectionEventArgs() { ServerConnection = this, RemoteEndPoint = Client.Client.RemoteEndPoint }); } catch (EntityException) { Server.Dispose(); return; } JamPacket responsePacket = new JamPacket(Guid.Empty, Guid.Empty, LoginResponse.DATA_TYPE, response.GetBytes()); Send(responsePacket); }