From: <sam...@us...> - 2007-02-20 14:04:25
|
Revision: 22 http://svn.sourceforge.net/mp-webinterface/?rev=22&view=rev Author: samuel337 Date: 2007-02-20 06:04:16 -0800 (Tue, 20 Feb 2007) Log Message: ----------- Thought of something better - improved client discovery code Modified Paths: -------------- trunk/source/ECP2Assembly/clsClientDiscovery.cs Modified: trunk/source/ECP2Assembly/clsClientDiscovery.cs =================================================================== --- trunk/source/ECP2Assembly/clsClientDiscovery.cs 2007-02-20 13:44:06 UTC (rev 21) +++ trunk/source/ECP2Assembly/clsClientDiscovery.cs 2007-02-20 14:04:16 UTC (rev 22) @@ -24,9 +24,9 @@ GroupTTL = groupTTL; } - public void IssueClientPing() + public void Refresh() { - if (udpComm != null) + if (udpComm == null) { udpComm = new UdpMCHelper(GroupIP, GroupTTL); udpComm.Start(GroupUdpPort); @@ -35,21 +35,89 @@ } ClientList.Clear(); + ClientListChangedEvent(new ClientListChangedEventArgs(string.Empty, ClientListChangedEventArgs.ChangeTypes.Cleared)); udpComm.Send(GroupUdpPort, UdpCommunication.MessageTypes.PING_REQUEST, "", DateTime.Now); } private void UdpComm_ReceiveEvent(UdpMCHelper.ReceiveEventArgs e) { - if (e.Type == UdpCommunication.MessageTypes.PING_RESPONSE) + switch (e.Type) { - lock (ClientList) - { - ClientList.Add(e.HostName); - } + case UdpCommunication.MessageTypes.PING_RESPONSE: + lock (ClientList) + { + if (!ClientList.Contains(e.HostName)) + { + ClientList.Add(e.HostName); + ClientListChangedEvent(new ClientListChangedEventArgs(e.HostName, ClientListChangedEventArgs.ChangeTypes.Added)); + } + } + break; + + case UdpCommunication.MessageTypes.PLUGIN_START: + lock (ClientList) + { + if (!ClientList.Contains(e.HostName)) + { + ClientList.Add(e.HostName); + ClientListChangedEvent(new ClientListChangedEventArgs(e.HostName, ClientListChangedEventArgs.ChangeTypes.Started)); + } + } + break; + + case UdpCommunication.MessageTypes.PLUGIN_STOP: + lock (ClientList) + { + if (ClientList.Contains(e.HostName)) + { + ClientList.Remove(e.HostName); + ClientListChangedEvent(new ClientListChangedEventArgs(e.HostName, ClientListChangedEventArgs.ChangeTypes.Stopped)); + } + } + break; } } + public delegate void ClientListChangedEventHandler(ClientListChangedEventArgs e); + public event ClientListChangedEventHandler ClientListChangedEvent; + + public class ClientListChangedEventArgs : EventArgs + { + public enum ChangeTypes + { + Added, + Started, + Stopped, + Cleared + } + + string m_Hostname; + ChangeTypes m_Change; + + public ClientListChangedEventArgs() + { + } + + public ClientListChangedEventArgs(string hostname, ChangeTypes change) + { + Hostname = hostname; + Change = change; + } + + public string Hostname + { + get { return m_Hostname; } + set { m_Hostname = value; } + } + + public ChangeTypes Change + { + get { return m_Change; } + set { m_Change = value; } + } + } + public void StopWaitingForResponses() { if (udpComm != null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |