public static void HandleLoginStart(StsSession session, ClientLoginStartMessage loginStart) { session.EnqueueEvent(new TaskGenericEvent <Account>(AuthDatabase.GetAccountAsync(loginStart.LoginName), account => { if (account == null) { session.EnqueueMessageError(new ServerErrorMessage((int)ErrorCode.InvalidAccountNameOrPassword)); return; } session.Account = account; byte[] s = account.S.ToByteArray(); byte[] v = account.V.ToByteArray(); session.KeyExchange = new Srp6Provider(account.Email, s, v); byte[] B = session.KeyExchange.GenerateServerCredentials(); using (MemoryStream stream = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write(s.Length); writer.Write(s, 0, s.Length); writer.Write(B.Length); writer.Write(B, 0, B.Length); session.EnqueueMessageOk(new ServerLoginStartMessage { KeyData = Convert.ToBase64String(stream.ToArray()) }); } session.State = SessionState.LoginStart; })); }
public static void HandleRequestGameToken(StsSession session, RequestGameTokenMessage requestGameToken) { Guid guid = RandomProvider.GetGuid(); session.EnqueueEvent(new TaskEvent(AuthDatabase.UpdateAccountGameToken(session.Account, guid), () => { session.EnqueueMessageOk(new RequestGameTokenResponse { Token = guid.ToString() }); })); }