Exemple #1
0
        /// <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();
        }