private void handleHelloMessage(HelloMessage msg, IPAddress sender) { // see if the peers list contains a SyncPeer with the same hostname SyncPeer found = _peers.Find((peer) => { return(peer.Hostname == msg.hostname); }); if (found != null) { // we know about this peer, update its last seen time found.LastResponded = DateTime.Now; } else { // we don't know about this peer, add it SyncPeer newPeer = new SyncPeer(); newPeer.Port = msg.listenPort; newPeer.Hostname = msg.hostname; newPeer.Address = sender; newPeer.LastResponded = DateTime.Now; _peers.Add(newPeer); Debug.WriteLine("Added new peer " + msg.hostname); SyncPeerUpdatedEventHandler handler = OnSyncPeerUpdated; if (handler != null) { handler(this, new SyncPeerUpdatedEventArgs(found, SyncPeerUpdatedAction.Added)); } // send our hello message quickly (so the peer doesn't have to wait ~5 seconds to get our next hello) _udpAgent.HurrySendHello(); // request the peer's applist Debug.WriteLine("Sending RequestAppList to " + sender.ToString()); RequestAppListMessage sendMsg = new RequestAppListMessage(); _tcpAgent.SendMessage(sendMsg, sender); } }
private void handleAppListMessage(AppListMessage msg, IPAddress sender) { SyncPeer found = _peers.Find((peer) => { return(peer.Address.Equals(sender)); }); if (found == null) { Debug.WriteLine("Received AppList from unknown peer " + sender.ToString()); } found.Apps = msg.availableApps; updateAvailableApps(); Debug.WriteLine(String.Format("{0} has {1} available apps", found.Hostname, found.Apps.Count)); SyncPeerUpdatedEventHandler handler = OnSyncPeerUpdated; if (handler != null) { handler(this, new SyncPeerUpdatedEventArgs(found, SyncPeerUpdatedAction.Updated)); } }
private void removePeer(SyncPeer peer) { // remove the peers Debug.WriteLine("Removing " + peer.Hostname + " from peers list"); if (_peers.Contains(peer)) { _peers.Remove(peer); } // update list of available apps (i.e. remove any that are no longer available) updateAvailableApps(); // notify listeners that the peers have been removed (need to do this after available apps has been updated) SyncPeerUpdatedEventHandler handler = OnSyncPeerUpdated; if (handler != null) { handler(this, new SyncPeerUpdatedEventArgs(peer, SyncPeerUpdatedAction.Removed)); } }