/// <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); }
internal void FireLoginFailEvent(string message) => LoginFailEvent?.Invoke(this, new ErrorEventArgs() { Message = message });