예제 #1
0
 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;
 }
예제 #2
0
        /// <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();
        }
예제 #3
0
        /// <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();
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <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);
 }