private void textBox1_Leave(object sender, EventArgs e)
 {
     if (textBox1.Text != "")
     {
         this.Enabled = false;
         lcr          = Authentication.LoginCheck(textBox1.Text);
         if (lcr.success == false)
         {
             MessageBox.Show("Error: " + lcr.exception);
             Application.Exit();
         }
         label3.Visible = textBox3.Visible = pictureBox1.Visible = lcr.needVCode;
         textBox3.Text  = "";
         if (lcr.needVCode)
         {
             pictureBox1.Image = ByteToImage(lcr.image);
         }
         this.Enabled = true;
     }
 }
        public ActionResult PostLogin(FormCollection form)
        {
            string username   = form["username"];
            string password   = form["password"];
            bool   isremember = Convert.ToBoolean(form["isremember"]);

            if (username == "" || password == "")
            {
                return(Json(new
                {
                    Result = false,
                    Message = "账号密码不能为空!"
                }));
            }
            //result success Failure LockedOut
            LoginCheckResult result = LoginCheck.PasswordSignIn(username, password, this.SetCustomerCookie);

            if (result == LoginCheckResult.Success)
            {
                Customer   cus            = this.CurrentCustomer;
                var        userRole       = cus.CustomerType;//getrolebyid
                HttpCookie userRoleCookie = new HttpCookie("Role");
                switch (userRole)
                {
                case CustomerType.User:
                {
                    userRoleCookie.Value = "User";
                    if (isremember)
                    {
                        //加上remember password
                        HttpCookie rolelongCookie = Request.Cookies[".ASPXAUTH"];
                        rolelongCookie.Expires = DateTime.Now.AddDays(7);
                        Response.Cookies.Add(rolelongCookie);
                        userRoleCookie.Expires = DateTime.Now.AddDays(7);
                    }
                    Response.SetCookie(userRoleCookie);
                    return(Json(new
                        {
                            Result = true,
                            Message = "User"
                        }));
                }

                case CustomerType.SuperAdmin:
                {
                    userRoleCookie.Value = "SuperAdmin";
                    if (isremember)
                    {
                        //加上remember password
                        HttpCookie rolelongCookie = Request.Cookies[".ASPXAUTH"];
                        rolelongCookie.Expires = DateTime.Now.AddDays(7);
                        Response.Cookies.Add(rolelongCookie);
                        userRoleCookie.Expires = DateTime.Now.AddDays(7);
                    }
                    Response.SetCookie(userRoleCookie);
                    return(Json(new
                        {
                            Result = true,
                            Message = "SuperAdmin"
                        }));
                }

                case CustomerType.Admin:
                {
                    userRoleCookie.Value = "Admin";
                    if (isremember)
                    {
                        //加上remember password
                        HttpCookie rolelongCookie = Request.Cookies[".ASPXAUTH"];
                        rolelongCookie.Expires = DateTime.Now.AddDays(7);
                        Response.Cookies.Add(rolelongCookie);
                        userRoleCookie.Expires = DateTime.Now.AddDays(7);
                    }
                    Response.SetCookie(userRoleCookie);
                    return(Json(new
                        {
                            Result = true,
                            Message = "Admin"
                        }));
                }

                default: throw new ArgumentNullException("Can not find user type by id");
                }
            }
            else if (result == LoginCheckResult.LockedOut)
            {
                return(Json(new
                {
                    Result = false,
                    Message = "未经审核的用户或此账户已被冻结,请联系管理员!"
                }));
            }

            else if (result == LoginCheckResult.Failure)
            {
                return(Json(new
                {
                    Result = false,
                    Message = "用户名或密码错误"
                }));
            }
            else
            {
                return(Json(new
                {
                    Result = false,
                    Message = "some error happened when login"
                }));
            }
        }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="loggedIn">Login status.</param>
 public LoggedInEventArgs(LoginCheckResult result)
 {
     Result = result;
 }
        /// <summary>
        /// Processes received packets.
        /// </summary>
        /// <param name="packet">Received packet.</param>
        void ProcessPacket(NetworkPacket packet)
        {
            // Decrypt data
            var data = packet.Data;

            if (data != null && data.Length > 0 && packet.PacketType != NetworkPacketType.PublicKey)
            {
                if (packet.PacketType != NetworkPacketType.ServerInfo)
                {
                    data = _decrypter.Decrypt(packet.Data);
                }
                if (data == null)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Error! Could not decrypt message from server");
                    return;
                }
            }
            switch (packet.PacketType)
            {
            case NetworkPacketType.PublicKey:
                try
                {
                    var serverPubKey = Encoding.ASCII.GetString(packet.Data);
                    _encrypter = new CryptoHelper(serverPubKey);
                }
                catch (Exception ex)
                {
                    _encrypter = null;
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received key is invalid! " + ex.Message);
                }
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
#pragma warning disable CC0004   // Catch block cannot be empty
                finally { try { _encrypterWaiter?.Cancel(); } catch { /* Ignore*/ } }
#pragma warning restore CC0004   // Catch block cannot be empty
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
                break;

            case NetworkPacketType.ListGames:
                try
                {
                    var glistString = Encoding.ASCII.GetString(data);
                    var glist       = JsonConvert.DeserializeObject <List <GameInfo> >(glistString);
                    Log.WriteLine(LogPriority.Verbose, "NetworkGameClient: Received list of games on server. Game count: " + glist.Count);
                    GameListReceived?.Invoke(this, new GameListEventArgs(glist));
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received list of games from server could not be read. " + e.Message);
                }
                break;

            case NetworkPacketType.ClientLogin:
                try
                {
                    if (data.Length != 1 || data[0] > 4)
                    {
                        Log.WriteLine(LogPriority.Information, "NetworkGameClient: Received login confirmation could not be read: No data!");
                        break;
                    }
                    LoginCheckResult loginResult = (LoginCheckResult)(int)data[0];
                    if (loginResult == LoginCheckResult.LoginOK)
                    {
                        IsLoggedIn = true;
                        Log.WriteLine(LogPriority.Information, "NetworkGameClient: Login to server successful!");
                    }
                    else
                    {
                        IsLoggedIn = false;
                        var error = "NetworkGameClient: Login to server failed! ";
                        switch (loginResult)
                        {
                        case LoginCheckResult.InvalidUser:
                            error += "Invalid user name";
                            break;

                        case LoginCheckResult.InvalidPassword:
                            error += "Invalid password";
                            break;

                        case LoginCheckResult.DatabaseError:
                            error += "Database error";
                            break;

                        case LoginCheckResult.AuthorizationRequired:
                            error += "Authorization required";
                            break;

                        case LoginCheckResult.CreateAccountDenied:
                            error += "Create account denied";
                            break;

                        default:
                            error += "Unknown error";
                            break;
                        }
                        Log.WriteLine(LogPriority.Information, error);
                    }
                    LoggedIn?.Invoke(this, new LoggedInEventArgs(loginResult));
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received login confirmation could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.CreateGame:
                try
                {
                    // Check if an UID was assigned
                    var ginfo = JsonConvert.DeserializeObject <GameInfo>(Encoding.ASCII.GetString(data));
                    if (ginfo != null)
                    {
                        if (ginfo.UID != 0)
                        {
                            GameCreated?.Invoke(this, new GameCreatedEventArgs(ginfo));
                        }
                    }
                    else
                    {
                        Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received CreateGame confirmation could not be read.");
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received CreateGame confirmation could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.JoinGame:
                try
                {
                    var jMsg = JsonConvert.DeserializeObject <JoinMessage>(Encoding.ASCII.GetString(data));
                    if (jMsg != null)
                    {
                        GameJoinRequested?.Invoke(this, new GameJoinRequestedEventArgs(jMsg));

                        // If joining and other side declined then set IsJoined to false
                        if (jMsg.Request == JoinRequestType.Decline)
                        {
                            IsJoined = false;
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received JoinGame confirmation could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.ServerInfo:
                try
                {
                    // Server data is always unencrypted
                    var jMsg = JsonConvert.DeserializeObject <ServerInfo>(Encoding.ASCII.GetString(packet.Data));
                    if (jMsg != null)
                    {
                        ServerRequiresLogin = jMsg.RequiresLogin;
                        ServerInfoReceived?.Invoke(this, new ServerInfoEventArgs(jMsg));
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received ServerInfo could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.ExitGame:
                try
                {
                    var eMsg = JsonConvert.DeserializeObject <ExitGame>(Encoding.ASCII.GetString(data));
                    if (eMsg != null)
                    {
                        if (eMsg.UID == UID)
                        {
                            IsJoined = false;
                            UID      = 0;
                            GameExitReceived?.Invoke(this, new ExitGameEventArgs(eMsg.Reason));
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received ExitGame message could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.GameSync:
                try
                {
                    var eMsg = JsonConvert.DeserializeObject <GameSync>(Encoding.ASCII.GetString(data));
                    if (eMsg != null && eMsg.UID == UID)
                    {
                        GameSyncReceived?.Invoke(this, new GameSyncEventArgs(eMsg));
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received GameSync message could not be read." + e.Message);
                }
                break;

            case NetworkPacketType.GameCommand:
                try
                {
                    var eMsg = JsonConvert.DeserializeObject <GameCommand>(Encoding.ASCII.GetString(data));
                    if (eMsg != null)
                    {
                        GameCommandReceived?.Invoke(this, new GameCommandEventArgs(eMsg));
                    }
                }
                catch (Exception e)
                {
                    Log.WriteLine(LogPriority.Error, "NetworkGameClient: Received GameSync message could not be read." + e.Message);
                }
                break;

            default:
                Log.WriteLine(LogPriority.Error, "NetworkGameClient: Packet type " + packet.PacketType + " not recognized!");
                break;
            }
        }