private void HandleLogonResponse(ParseData data) { DataReader dr = new DataReader(data.Data); int status = dr.ReadInt32(); if (status == 1) { OnLoginSucceeded(BaseEventArgs.GetEmpty(data)); Product product = Product.GetByProductCode(m_settings.Client); if (product.UsesUdpPing) { BncsPacket pck = new BncsPacket((byte)BncsPacketId.UdpPingResponse); pck.InsertDwordString("bnet"); Send(pck); } EnterChat(); } else { LoginFailedEventArgs args = new LoginFailedEventArgs(LoginFailureReason.InvalidAccountOrPassword, status) { EventData = data }; OnLoginFailed(args); } }
public override bool Connect() { eventsToFire.Enqueue(new InvokeHelper <EventArgs> { Target = OnConnected, Arguments = EventArgs.Empty }); eventsToFire.Enqueue(new InvokeHelper <BaseEventArgs> { Target = OnClientCheckPassed, Arguments = BaseEventArgs.GetEmpty(null) }); eventsToFire.Enqueue(new InvokeHelper <InformationEventArgs> { Target = OnInformation, Arguments = new InformationEventArgs("Login succeeded!") }); eventsToFire.Enqueue(new InvokeHelper <BaseEventArgs> { Target = OnLoginSucceeded, Arguments = BaseEventArgs.GetEmpty(null) }); eventsToFire.Enqueue(new InvokeHelper <EnteredChatEventArgs> { Target = OnEnteredChat, Arguments = new EnteredChatEventArgs(Settings.Username, CreateStatstringForClient(Settings.Client), Settings.Username) }); eventsToFire.Enqueue(new InvokeHelper <ServerChatEventArgs> { Target = OnServerBroadcast, Arguments = new ServerChatEventArgs(ChatEventType.Information, 0, "Welcome to Battle.net! This server is simulated.") }); eventsToFire.Enqueue(new InvokeHelper <ChannelListEventArgs> { Target = OnChannelListReceived, Arguments = new ChannelListEventArgs(new string[] { "Starcraft USA-1", "Clan Recruitment", "The Void", "Public Tech Support", "Blizzard Tech Support" }) }); EnqueueNewChannelEvents("Starcraft USA-1"); tmrGo.Start(); return(true); }
private void HandleAuthAccountLogonProof(ParseData data) { DataReader dr = new DataReader(data.Data); int status = dr.ReadInt32(); byte[] m2 = dr.ReadByteArray(20); // 0 = success // 2 = incorrect password // 14 = success; register e-mail // 15 = custom error switch (status) { case 0: // success if (!m_nls.VerifyServerProof(m2)) { //CloseWithError(BattleNet.LoginProofServerProofFailed); OnError(new ErrorEventArgs(ErrorType.LoginServerProofFailed, Strings.LoginProofServerProofFailed, false)); EnterChat(); } else { OnInformation(new InformationEventArgs(Strings.LoginProofSuccess)); OnLoginSucceeded(BaseEventArgs.GetEmpty(null)); EnterChat(); } break; case 2: CloseWithError(Strings.LoginProofClientProofFailed, ErrorType.InvalidUsernameOrPassword); break; case 14: if (!m_nls.VerifyServerProof(m2)) { OnError(new ErrorEventArgs(ErrorType.LoginServerProofFailed, Strings.LoginProofServerProofFailed, false)); EnterChat(); } else { OnInformation(new InformationEventArgs(Strings.LoginProofRegisterEmail)); EnterChat(); } break; case 15: CloseWithError( string.Format(CultureInfo.CurrentCulture, Strings.LoginProofCustomError, dr.ReadCString()), ErrorType.InvalidUsernameOrPassword ); break; } BattleNetClientResources.IncomingBufferPool.FreeBuffer(data.Data); }
private void HandleLogonResponse2(PD data) { DataReader dr = new DataReader(data.Data); int success = dr.ReadInt32(); if (success == 0) { m_events.OnLoginSucceeded(BaseEventArgs.GetEmpty(data)); BncsPacket pck = new BncsPacket((byte)BncsPacketId.QueryRealms2); } else { m_events.OnLoginFailed(new LoginFailedEventArgs(LoginFailureReason.AccountDoesNotExist, success)); } }
/// <summary> /// Begins the connection to Battle.net. /// </summary> /// <returns><see langword="true" /> if the connection succeeded; otherwise <see langword="false" />.</returns> public override bool Connect() { BattleNetClientResources.RegisterClient(this); bool ok = base.Connect(); if (ok) { InitializeListenState(); CultureInfo ci = CultureInfo.CurrentCulture; RegionInfo ri = RegionInfo.CurrentRegion; TimeSpan ts = DateTime.UtcNow - DateTime.Now; OnConnected(BaseEventArgs.GetEmpty(null)); Send(new byte[] { 1 }); BncsPacket pck = new BncsPacket((byte)BncsPacketId.AuthInfo); pck.Insert(0); pck.InsertDwordString(PLATFORM_TYPE); // platform pck.InsertDwordString(m_settings.Client); // product pck.InsertInt32(m_settings.VersionByte); // verbyte pck.InsertDwordString(string.Concat(ci.TwoLetterISOLanguageName, ri.TwoLetterISORegionName)); pck.InsertByteArray(LocalEP.Address.GetAddressBytes()); pck.InsertInt32((int)ts.TotalMinutes); pck.InsertInt32(ci.LCID); pck.InsertInt32(ci.LCID); pck.InsertCString(ri.ThreeLetterWindowsRegionName); pck.InsertCString(ri.DisplayName); Send(pck); if (Settings.PingMethod == PingType.ZeroMs) { pck = new BncsPacket((byte)BncsPacketId.Ping); pck.InsertInt32(new Random().Next()); Send(pck); } StartParsing(); StartListening(); } return(ok); }
private void HandleAuthCheck(ParseData data) { DataReader dr = new DataReader(data.Data); uint result = dr.ReadUInt32(); string extraInfo = dr.ReadCString(); BattleNetClientResources.IncomingBufferPool.FreeBuffer(data.Data); if (result == 0) { OnClientCheckPassed(BaseEventArgs.GetEmpty(null)); } else { OnClientCheckFailed(new ClientCheckFailedEventArgs((ClientCheckFailureCause)result, extraInfo)); Close(); return; } ContinueLogin(); }
/// <summary> /// Closes the connection. /// </summary> public override void Close() { base.Close(); if (!m_closing) { m_closing = true; BattleNetClientResources.UnregisterClient(this); OnDisconnected(BaseEventArgs.GetEmpty(null)); m_queue.Clear(); // clear the outgoing command queue StopParsingAndListening(); ResetConnectionState(); } else { m_closing = false; } }
private void HandleLogonResponse2(ParseData data) { DataReader dr = new DataReader(data.Data); int success = dr.ReadInt32(); if (success == 0) { OnLoginSucceeded(BaseEventArgs.GetEmpty(data)); Product product = Product.GetByProductCode(m_settings.Client); if (product.UsesUdpPing) { BncsPacket pck = new BncsPacket((byte)BncsPacketId.UdpPingResponse); pck.InsertDwordString("bnet"); Send(pck); } EnterChat(); } else { LoginFailureReason reason = LoginFailureReason.Unknown; switch (success) { case 1: // account DNE reason = LoginFailureReason.AccountDoesNotExist; break; case 2: // invalid password reason = LoginFailureReason.InvalidAccountOrPassword; break; case 6: // account closed reason = LoginFailureReason.AccountClosed; break; } LoginFailedEventArgs args = new LoginFailedEventArgs(reason, success, dr.ReadCString()) { EventData = data }; OnLoginFailed(args); } }
private void HandleWarden(ParseData data) { if (m_warden != null) { byte[] total = new byte[4 + data.Length]; total[0] = 0xff; total[1] = (byte)BncsPacketId.Warden; byte[] len = BitConverter.GetBytes(data.Length); total[2] = len[0]; total[3] = len[1]; Buffer.BlockCopy(data.Data, 0, total, 4, data.Length); m_warden.ProcessWarden(total); } else { OnWardenUnhandled(BaseEventArgs.GetEmpty(null)); } BattleNetClientResources.IncomingBufferPool.FreeBuffer(data.Data); }