/// <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(); }