/// <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); }
/// <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; } }