Пример #1
0
        /// <summary>
        /// 发送Login数据包
        /// </summary>
        /// <returns></returns>
        public static int Login()
        {
            int max_login_time = 3; // TODO Better Implementation is favored
            int i = 0;

            while (true)
            {
                // Make Challenge
                Challenge();
                // Make Login Packet
                Cert.MakeLoginPacket(salt, out buffer, out int buffer_len);
                SendPacket(buffer, buffer_len);
                int recv_len = ReceivePacket();
                if (recv_len <= 0)
                {
                    Utils.Log4Net.WriteLog("接受登录数据包失败,重试中...");
                    i++;
                }
                else
                {
                    if (buffer[0] != 0x04)
                    {
                        if (buffer[0] == 0x05)
                        {
                            LoginFailEvent?.Invoke(null, new Msg("登录失败,错误的用户名或密码!"));
                        }
                        else
                        {
                            LoginFailEvent?.Invoke(null, new Msg("登录失败,无法识别登录返回结果!"));
                        }
                        return(-1);
                    }
                }

                if (i >= max_login_time || recv_len > 0)
                {
                    break;
                }
            }
            if (i >= max_login_time)
            {
                LoginFailEvent?.Invoke(null, new Msg("登录失败重试次数过多,取消登录!"));
                return(-5);
            }
            // Send Login Successfully
            Utils.Log4Net.WriteLog("发送登录数据包成功!");
            Buffer.BlockCopy(buffer, 0x17, tail, 0, 16);

            return(0);
        }
Пример #2
0
 internal void FireLoginFailEvent(string message) => LoginFailEvent?.Invoke(this, new ErrorEventArgs()
 {
     Message = message
 });