private void PriUplynutiDoby(object o) { UdpObjekt obj = o as UdpObjekt; obj.Klient.Close(); obj.Timerek.Dispose(); //m_Bot.Gui.VypisRadek("TIMEOUT"); }
private void ReceiveCallback(IAsyncResult ar) { UdpObjekt obj = ar.AsyncState as UdpObjekt; IPEndPoint ip = new IPEndPoint(obj.IP, obj.Protokol.Port); byte[] paketa; try { paketa = obj.Klient.EndReceive(ar, ref ip); obj.Timerek.Dispose(); PacketReader reader = new PacketReader(); reader.NactiPaketu(paketa); ServerInfo info = obj.Protokol.ZiskejInfo(reader); if (info != null) { lock (m_Hlaska) m_Hlaska.AppendLine(string.Format("Hra: {0} IP: {1} Mapa: {2} Poèet hráèù: {3} Poèet botù: {4}", info.Hra.ToString(), ip.Address.ToString(), info.Mapa, info.PocetHracu.ToString(), info.PocetBotu.ToString())); } reader.UvolniPaketu(); obj.Klient.Close(); } catch (NullReferenceException) { //ar mùže mùže být zøídka null nevím proè a je mi to jedno :) } catch (SocketException) { //m_Bot.Gui.VypisRadek("CATCH2"); } catch (ObjectDisposedException) //vznikají když to zruším pøi timeoutu { } ZkontrolujStopku(); }
internal override void PriPouziti(SixBot bot, string odesilatel) { lock (CsServery) { if (m_CsServery.Count == 0) { return; } m_MereniCasu.Reset(); m_MereniCasu.Start(); m_OtestovanoIP = 0; if (m_Hlaska.Length != 0) { m_Hlaska.Remove(0, m_Hlaska.Length); } foreach (IPAddress ip in m_CsServery) { foreach (StatProtocol protokol in StatProtocol.Protokoly) { UdpClient client = new UdpClient(); UdpObjekt obj = new UdpObjekt(client, ip, odesilatel, protokol); client.Connect(ip, protokol.Port); client.Send(protokol.Dotaz, protokol.Dotaz.Length); try { client.BeginReceive(m_AsCallback, obj); obj.Timerek = new Timer(m_TimerekCallback, obj, 100, Timeout.Infinite); } catch (SocketException /*ex*/) { // Stávající pøipojení bylo vynucenì ukonèeno vzdáleným hostitelem // m_Bot.Gui.VypisRadek("CATCH: " + ex.ToString()); ZkontrolujStopku(); client.Close(); continue; } } } m_Stopka.WaitOne(); m_MereniCasu.Stop(); if (m_Hlaska.Length > 0) { m_Hlaska.AppendLine(string.Format("Doba testu: {0} ms Otestováno: {1} IP adres Odesilatel: {2} (pohodlnìjší verze http://www.findcs.wz.cz/ )", (Math.Round((1000.0 * 1000.0 * 1000.0 * m_MereniCasu.ElapsedTicks / Stopwatch.Frequency) / 1000000.0, 3)).ToString(), (m_OtestovanoIP / StatProtocol.Protokoly.Length).ToString(), odesilatel)); m_Bot.ChatZprava(m_Hlaska.ToString()); } else { m_Hlaska.AppendLine(string.Format("Pøikaz -findcs nenašel žádný bìžící server Odesilatel: {0} (pohodlnìjší verze http://www.findcs.wz.cz/ )", odesilatel)); m_Hlaska.AppendLine(string.Format("Doba testu: {0} ms Otestováno: {1} IP adres", (Math.Round((1000.0 * 1000.0 * 1000.0 * m_MereniCasu.ElapsedTicks / Stopwatch.Frequency) / 1000000.0, 3)), (m_OtestovanoIP / StatProtocol.Protokoly.Length).ToString())); m_Bot.ChatZprava(m_Hlaska.ToString()); } } }