public CSearchUDP() { m_SockUDP = new RoutinesLibrary.Net.Protocols.UDP.UDP(SearcherServicesData.PORT_STATION_DISCOVERY); m_SockUDP.DataReceived += new RoutinesLibrary.Net.Protocols.UDP.UDP.DataReceivedEventHandler(m_SockUDP_DataReceived); m_Timer = new System.Timers.Timer(); m_Timer.Elapsed += m_Timer_Elapsed; m_Timer.AutoReset = false; // se debe activar de nuevo al salir del evento Elapsed m_Timer.Stop(); m_StationHashTable = new CStationHashtableUDP(); ChangeTable = false; }
/// <summary> /// Class constructor. Wait to receive requests to respond to searches /// </summary> /// <param name="messageRequest">Request message</param> /// <param name="messageResponse">Response message</param> /// <param name="port">Port to wait searches</param> /// <param name="localIPAdress">Local IP address to response</param> public DiscoveryUDPHost(string messageRequest, string messageResponse, ushort port, string localIPAdress = "") { //Configuration search m_MessageRequest = messageRequest; m_MessageResponse = messageResponse; m_Port = port; m_LocalIPAddress = localIPAdress; //UDP socket m_SockUDP = new RoutinesLibrary.Net.Protocols.UDP.UDP(m_Port); m_SockUDP.DataReceived += new RoutinesLibrary.Net.Protocols.UDP.UDP.DataReceivedEventHandler(this.SockUDP_DataReceived); m_SockUDP.Activate(); }
/// <summary> /// Class constructor. Starts searches automatically /// </summary> /// <param name="messageRequest">Request message</param> /// <param name="messageResponse">Response message</param> /// <param name="port">Port to perform searches</param> /// <param name="discoverInterval">Time interval to perform searches</param> public DiscoveryUDPClient(string messageRequest, string messageResponse, ushort port, int discoverInterval = 3000) { //Configuration search m_MessageRequest = messageRequest; m_MessageResponse = messageResponse; m_Port = port; m_DiscoverInterval = discoverInterval; //UDP socket m_SockUDP = new RoutinesLibrary.Net.Protocols.UDP.UDP(RoutinesLibrary.Net.InformationNetworkInterface.GetPortAvailable()); //m_SockUDP.DataReceived += new System.EventHandler(this.SockUDP_DataReceived); m_SockUDP.DataReceived += new RoutinesLibrary.Net.Protocols.UDP.UDP.DataReceivedEventHandler(SockUDP_DataReceived); m_SockUDP.Activate(); //Search m_ThreadSearch = new Thread(new System.Threading.ThreadStart(Process_Discover)); m_ThreadSearch.Name = "Process_Discover_DiscoveryUDPClient"; m_ThreadSearch.Start(); }
/// <summary> /// Process to perform searches periodically /// </summary> /// <remarks></remarks> private void Process_Discover() { while (m_IsAliveThreadSearch) { if (m_SeachActive) { //get the list of addresses searched m_semaphoreListDiscoveredServices.WaitOne(); m_ListDiscoveredServices.Clear(); foreach (EndpointAddress ep in m_tempListDiscoveredServices) { m_ListDiscoveredServices.Add(ep); } m_tempListDiscoveredServices.Clear(); m_semaphoreListDiscoveredServices.Release(); //send discover frame try { m_SockUDP.SendBroadcast(Encoding.ASCII.GetBytes(m_MessageRequest), m_Port); } catch (Exception ex) { #if DEBUG throw (new System.Exception(ex.Message)); #endif } } Thread.Sleep(m_DiscoverInterval); } m_SockUDP.Dispose(); m_SockUDP = null; //m_SockUDP.DataReceived += new System.EventHandler(SockUDP_DataReceived); m_SockUDP.DataReceived -= new RoutinesLibrary.Net.Protocols.UDP.UDP.DataReceivedEventHandler(SockUDP_DataReceived); }
/// <summary> /// Release resources /// </summary> public void Dispose() { m_SockUDP.Dispose(); m_SockUDP = null; //m_SockUDP.DataReceived -= new RoutinesLibrary.Net.Protocols.UDP.UDP.DataReceivedEventHandler(this.SockUDP_DataReceived); }