Ejemplo n.º 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();
        }
Ejemplo n.º 2
0
 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.");
 }