/// <summary> /// Connect to a hub /// this will initialize a hub with /// some client values like our nickname etc /// add some event handlers /// and start connecting to it /// </summary> /// <param name="me">the hub you want to connect to</param> public void ConnectHub(Hub me) { me.Nick = nick; if (!string.IsNullOrEmpty(local_peer.ExternalIP)) me.MyIP = local_peer.ExternalIP; else me.MyIP = local_peer.IP; me.MyTcpPort = local_peer.TcpPort; me.MyUdpPort = local_peer.UdpPort; me.MyEmail = email; me.MyDescription = description; me.MyVersion = version; me.MyTagVersion = tag_version; me.MyShareSize = share_size; me.MyConnectionMode = connection_mode; me.MyConnectionSpeed = connection_speed; me.MyName = name; if (!me.IsGrabbedByClient) { me.SearchReceived += delegate(Hub search_hub, Hub.SearchParameters search) { if (search.HasTTH) { Sharing.SharingEntry entry = shares.GetShareByTTH(search.tth); if (entry != null) { if (search.mode == Hub.ConnectionMode.Passive) search_hub.SearchReply(entry.Filename,entry.Filesize, search); else local_peer.SearchReply(entry.Filename,entry.Filesize,search_hub, search); } } else { //TODO add old fashioned search here } }; me.SearchResultReceived += delegate(Hub search_result_hub, SearchResults.SearchResult result) { InterpretReceivedSearchResult(result); }; me.PasswordRequested += delegate(Hub password_requested) { //TODO add a password for hubs db // and first check that db before and send a found password //automagically and silent if (HubPasswordRequested != null) return(HubPasswordRequested(password_requested)); return (null); }; me.MainChatLineReceived += delegate(Hub main_chat_hub, Hub.ChatLine main_chat_line) { if (HubMainChatReceived != null) HubMainChatReceived(main_chat_hub, main_chat_line); }; me.PrivateChatLineReceived += delegate(Hub private_chat_hub, Hub.ChatLine private_chat_line) { if (HubPrivateChatReceived != null) HubPrivateChatReceived(private_chat_hub, private_chat_line); }; me.MoveForced += delegate(Hub src_hub, Hub dst_hub) { if (HubMoveForced != null) HubMoveForced(src_hub, dst_hub); }; me.ConnectToMeReceived += delegate(Hub hub, Peer connect_to_me_client) { //free slots check maybe needed SetupPeerEventHandler(connect_to_me_client); connect_to_me_client.Connected += delegate(Peer connect_to_me_connected_client) { if (PeerConnected != null) PeerConnected(connect_to_me_connected_client); connect_to_me_connected_client.StartHandShake(); lock (peers_lock) { peers.Add(connect_to_me_connected_client); } }; connect_to_me_client.Connect(); }; me.Disconnected += delegate(Hub hub) { UpdateSourcesByHub(hub, false); lock (connected_hubs_lock) { if (connected_hubs.Contains(hub)) connected_hubs.Remove(hub); } if (HubDisconnected != null) HubDisconnected(hub); }; me.Connected += delegate(Hub hub) { lock (connected_hubs_lock) { if (!connected_hubs.Contains(hub)) connected_hubs.Add(hub); } if (HubConnected != null) HubConnected(hub); }; me.UnableToConnect += delegate(Hub hub) { UpdateSourcesByHub(hub, false); /*lock (connected_hubs_lock) TODO check if commenting this out hurts our code---> :-) { if (connected_hubs.Contains(hub)) connected_hubs.Remove(hub); }*/ if (HubUnableToConnect != null) HubUnableToConnect(hub); }; me.LoggedIn += delegate(Hub hub) { if (HubLoggedIn != null) HubLoggedIn(hub); }; me.UserJoined += delegate(Hub hub, string username) { UpdateSourcesByUsername(username, hub, true); if (HubUserJoined != null) HubUserJoined(hub, username); }; me.UserQuit += delegate(Hub hub, string username) { UpdateSourcesByUsername(username, hub, false); if (HubUserQuit != null) HubUserQuit(hub, username); }; me.IsGrabbedByClient = true; } me.Connect(); }
public void TestLocalHubConnect() { Console.WriteLine("Test to connect to a local hub (remember to start some hub before)."); bool wait = true; Hub hub = new Hub(); hub.Address = "localhost"; hub.Connected += delegate(Hub connected) { Console.WriteLine("Hub Connected"); //Assert.IsTrue(!string.IsNullOrEmpty(external_ip), "no ip address fetched"); //wait = false; }; hub.LoggedIn += delegate(Hub logged_in) { Console.WriteLine("Hub Logged in"); wait = false; }; hub.Disconnected += delegate(Hub disconnected) { if (wait) { Console.WriteLine("Test failed : Hub disconnected."); Assert.Fail("Test failed : Hub disconnected."); } }; hub.UnableToConnect += delegate(Hub error) { Console.WriteLine("Test failed : Unable to connect to"); }; hub.IsGrabbedByClient = true; hub.Connect(); Console.WriteLine("Waiting for hub events."); DateTime start = DateTime.Now; while (wait) { if (DateTime.Now - start > new TimeSpan(0, 0, 10)) { Console.WriteLine(""); Console.WriteLine("Operation took too long"); wait = false; Assert.Fail("Operation took too long"); } Console.Write("."); Thread.Sleep(250); } hub.Disconnect(); Console.WriteLine("Local Hub Connect Test successful."); }