예제 #1
0
        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;
            }));
        }
예제 #2
0
        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()
                });
            }));
        }