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.
|