示例#1
0
        public string GetHubStatus()
        {
            var clientStats   = _clientConnections.Select(x => BuildHubStatus(x, _clientMessages)).ToArray();
            var serverStats   = _serverConnections.Select(x => BuildHubStatus(x, _serverMessages)).ToArray();
            var clientOverall = new HubStatus
            {
                ConnectionCount = clientStats.Sum(x => x.ConnectionCount),
                MessageCount    = clientStats.Sum(x => x.MessageCount)
            };
            var serverOverall = new HubStatus
            {
                ConnectionCount = serverStats.Sum(x => x.ConnectionCount),
                MessageCount    = serverStats.Sum(x => x.MessageCount)
            };

            return(JsonConvert.SerializeObject(new
            {
                overall = new
                {
                    client = clientOverall,
                    server = serverOverall,
                    success = _successCount,
                    error = _failureCount
                },
                client = clientStats,
                server = serverStats
            }));
        }
示例#2
0
        void hub_ConnectionStatusChange(object sender, FmdcEventArgs e)
        {
            HubStatus h;

            switch (e.Action)
            {
            case TcpConnection.Disconnected:
                if (e.Data is System.Exception)
                {
                    h = new HubStatus(HubStatus.Codes.Disconnected, (System.Exception)e.Data);
                }
                else
                {
                    h = new HubStatus(HubStatus.Codes.Disconnected);
                }
                hub.RegMode = -1;
                // Sets MyInfo Interval to 0 when connection is disconnected
                this.myInfoLastUpdated = 0;
                lastMyInfo             = null;
                break;

            case TcpConnection.Connected:
                h = new HubStatus(HubStatus.Codes.Connected);
                break;

            case TcpConnection.Connecting:
            default:
                h = new HubStatus(HubStatus.Codes.Connecting);
                break;
            }
            Update(hub, new FmdcEventArgs(Actions.StatusChange, h));
            hub.Userlist.Clear();
        }
示例#3
0
 internal HubConnectionStatus(ServerConfiguration configuration, WebChannel channel, HubRepository repository, bool isValid, HubStatus status, string message)
 {
     Configuration = configuration;
     Channel       = channel;
     Repository    = repository;
     Status        = status;
     Message       = message;
     IsValid       = isValid;
 }
示例#4
0
        public HubStatus GetStatus(string hubName)
        {
            var requestData = new SoftEtherParameterCollection
            {
                { "HubName", hubName }
            };

            var rawData = _softEther.CallMethod("GetHubStatus", requestData);

            return(HubStatus.Deserialize(rawData));
        }
示例#5
0
        public void protRcvd(object sender, FmdcEventArgs e)
        {
            Hub hub = (sender as Hub);

            switch (e.Action)
            {
            case Actions.StatusChange:
                HubStatus status = (e.Data as HubStatus);
                if (status.Code.Equals("Connected"))
                {
                    this.hublist.Add(hub.Name, hub);
                }
                else if (status.Code.Equals("Disconnected"))
                {
                    this.hublist.Remove(hub.Name);
                }
                break;
            }
        }
        /// <summary>
        /// Connects to the specified hub (or another hub if this hub is redirecting)
        /// </summary>
        /// <returns>The last web channel it was able to connect to after processing redirections.</returns>
        private static async Task <HubConnectionStatus> Connect(ServerConfiguration configuration)
        {
            WebChannel               channel            = null;
            bool                     canConnect         = true;
            HubStatus                status             = HubStatus.Maintenance; //a reasonable default.
            string                   statusMessage      = null;
            Guid?                    serverRepositoryId = null;
            DateTimeOffset?          expirationDt       = null;
            Version                  protocolVersion    = new Version(0, 0);
            NetworkConnectionOptions agentLiveStream    = null;
            NetworkConnectionOptions clientLiveStream   = null;

            //first, is it a valid config?  No point in trying to connect if it's a bum config.
            HubConnectionStatus connectionStatus;

            try
            {
                configuration.Validate();
            }
            catch (Exception ex)
            {
                canConnect       = false;
                statusMessage    = "Invalid configuration: " + ex.Message;
                connectionStatus = new HubConnectionStatus(configuration, false, status, statusMessage);
                return(connectionStatus);
            }

            //and now try to connect to the server
            try
            {
                channel = CreateChannel(configuration);
                var configurationGetRequest = new HubConfigurationGetRequest();
                await channel.ExecuteRequest(configurationGetRequest, 1)
                .ConfigureAwait(false);     //we'd like it to succeed, so we'll give it one retry

                var configurationXml = configurationGetRequest.Configuration;

                //now, if we got back a redirect we need to go THERE to get the status.
                if (configurationXml.redirectRequested)
                {
                    //recursively try again.
                    channel.Dispose();
                    connectionStatus = await Connect(configurationXml.ToServerConfiguration()).ConfigureAwait(false);
                }
                else
                {
                    //set the right status message
                    status = (HubStatus)configurationXml.status;

                    switch (status)
                    {
                    case HubStatus.Available:
                        break;

                    case HubStatus.Expired:
                        statusMessage = "The Server's license has expired.  " + (configuration.UseGibraltarService
                                    ? "You can reactivate your license in seconds at www.GibraltarSoftware.com."
                                    : "To renew your license, run the Administration tool on the Loupe Server."
                                                                                 );
                        break;

                    case HubStatus.Maintenance:
                        statusMessage =
                            "The Server is currently undergoing maintenance and can't process requests.";
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("status");
                    }

                    if (configurationXml.id != null)
                    {
                        serverRepositoryId = new Guid(configurationXml.id);
                    }

                    if (configurationXml.expirationDt != null)
                    {
                        expirationDt = DataConverter.FromDateTimeOffsetXml(configurationXml.expirationDt);
                    }

                    string publicKey = configurationXml.publicKey;

                    if (string.IsNullOrEmpty(configurationXml.protocolVersion) == false)
                    {
                        protocolVersion = new Version(configurationXml.protocolVersion);
                    }

                    LiveStreamServerXml liveStreamConfig = configurationXml.liveStream;
                    if (liveStreamConfig != null)
                    {
                        agentLiveStream = new NetworkConnectionOptions
                        {
                            HostName = channel.HostName, Port = liveStreamConfig.agentPort,
                            UseSsl   = liveStreamConfig.useSsl
                        };
                        clientLiveStream = new NetworkConnectionOptions
                        {
                            HostName = channel.HostName, Port = liveStreamConfig.clientPort,
                            UseSsl   = liveStreamConfig.useSsl
                        };
                    }

                    //We've connected for sure, time to set up our connection status to return to our caller with the full connection info
                    connectionStatus = new HubConnectionStatus(configuration, channel,
                                                               new HubRepository(expirationDt, serverRepositoryId, protocolVersion, publicKey, agentLiveStream,
                                                                                 clientLiveStream),
                                                               true, status, statusMessage);
                }
            }
            catch (WebChannelFileNotFoundException)
            {
                canConnect = false;
                if (configuration.UseGibraltarService)
                {
                    //we'll treat file not found (e.g. customer never existed) as expired to get the right UI behavior.
                    status        = HubStatus.Expired;
                    statusMessage = "The specified customer name is not valid";
                }
                else
                {
                    statusMessage = "No service could be found with the provided information";
                }

                connectionStatus = new HubConnectionStatus(configuration, false, status, statusMessage);
            }
            catch (WebChannelBadRequestException)
            {
                canConnect = false;
                //we want to be somewhat more intelligent in our responses to decode what these might MEAN.
                if (configuration.UseGibraltarService)
                {
                    status        = HubStatus.Expired;
                    statusMessage = "The specified customer name is not valid";
                }
                else
                {
                    statusMessage = "The server does not support this service or the specified directory is not valid";
                }

                connectionStatus = new HubConnectionStatus(configuration, false, status, statusMessage);
            }
            catch (Exception ex)
            {
                canConnect    = false;
                statusMessage = ex.Message;

                connectionStatus = new HubConnectionStatus(configuration, false, status, statusMessage);
            }

            //before we return make sure we clean up an errant channel if we don't need it.
            if ((canConnect == false) && (channel != null))
            {
                channel.Dispose();
                channel = null;
            }

            return(connectionStatus);
        }
示例#7
0
 void hub_ConnectionStatusChange(object sender, FmdcEventArgs e)
 {
     HubStatus h;
     switch (e.Action)
     {
         case TcpConnection.Disconnected:
             if (e.Data is System.Exception)
                 h = new HubStatus(HubStatus.Codes.Disconnected, (System.Exception)e.Data);
             else
                 h = new HubStatus(HubStatus.Codes.Disconnected);
             hub.RegMode = -1;
             // Sets MyInfo Interval to 0 when connection is disconnected
             this.myInfoLastUpdated = 0;
             lastMyInfo = null;
             IsReady = false;
             break;
         case TcpConnection.Connected:
             h = new HubStatus(HubStatus.Codes.Connected);
             break;
         case TcpConnection.Connecting:
         default:
             h = new HubStatus(HubStatus.Codes.Connecting);
             break;
     }
     Update(hub, new FmdcEventArgs(Actions.StatusChange, h));
     hub.Userlist.Clear();
 }
示例#8
0
 internal HubConnectionStatus(ServerConfiguration configuration, bool isValid, HubStatus status, string message)
     : this(configuration, null, null, isValid, status, message)
 {
 }
示例#9
0
        public void Hub_Update(object sender, FlowLib.Events.FmdcEventArgs e)
        {
            Hub hub = (Hub)sender;

            this.hub = hub;
            string str = string.Empty;

            switch (e.Action)
            {
            case Actions.TransferStarted:
                if (e.Data is ITransfer)
                {
                    ITransfer trans = (ITransfer)e.Data;
                    transferManager.StartTransfer(trans);
                }
                break;

            case Actions.TransferRequest:
                if (e.Data is TransferRequest)
                {
                    TransferRequest req = (TransferRequest)e.Data;
                    transferManager.AddTransferReq(req);
                }
                break;

                #region MainMessage
            case Actions.MainMessage:
                if (e.Data is MainMessage)
                {
                    MainMessage mainchat = (MainMessage)e.Data;
                    if (mainchat.From == null)
                    {
                        str = mainchat.Content;
                    }
                    else
                    {
                        User u = hub.GetUserById(mainchat.From);
                        if (u == null)
                        {
                            str = "<" + mainchat.From + "> " + mainchat.Content;
                        }
                        else
                        {
                            str = "<" + u.DisplayName + "> " + mainchat.Content;
                        }
                    }
                    // Test : Start
                    user = hub.GetUserById("DC++0.699");
                    //User user = hub.GetUserById("DCDM++0.0495");
                    if (user != null && hub.Share != null)
                    {
                        ContentInfo ci = new ContentInfo(ContentInfo.FILELIST, FlowLib.Utils.FileLists.BaseFilelist.UNKNOWN);
                        ci.Set(ContentInfo.STORAGEPATH, @"C:\Private\FMDC\PiP\FlowLibDemo\ConsoleDemo\bin\Debug\FileLists\" + user.ID + ".xml.bz2");
                        DownloadItem di = new DownloadItem(ci);
                        downloadManager.AddDownload(di, new Source(null, user.ID));
                        downloadManager.DownloadCompleted += new FmdcEventHandler(DownloadManager_DownloadCompleted);
                        this.Hub_Update(null, new FmdcEventArgs(Actions.TransferRequest, new TransferRequest(user.ID, hub, user.UserInfo)));
                        //TransferManager.AddTransferReq(user.ID, hub, user.UserInfo);
                        hub.Send(new FlowLib.Protocols.HubNmdc.ConnectToMe(user.ID, hub.Share.Port, hub));
                    }
                    // Test : End
                }
                else
                {
                    str = e.Data.ToString();
                }
                Console.WriteLine(str);
                break;

                #endregion
                #region PrivateMessage
            case Actions.PrivateMessage:
                PrivateMessage to = (PrivateMessage)e.Data;
                Console.WriteLine("*** PM From: " + to.From + ", To: " + to.To + " " + to.Content);
                break;

                #endregion
                #region RegMode
            case Actions.RegMode:
                break;

                #endregion
                #region Status
            case Actions.StatusChange:
                HubStatus status = (HubStatus)e.Data;
                switch (status.Code)
                {
                case HubStatus.Codes.Disconnected:
                    Console.WriteLine("*** Hub Disconnected");
                    if (status.Exception != null)
                    {
#if DEBUG
                        if (status.Exception is System.Net.Sockets.SocketException)
                        {
                            System.Net.Sockets.SocketException se = (System.Net.Sockets.SocketException)status.Exception;
                            StringBuilder sb = new StringBuilder();
                            sb.Append("\r\n");
                            sb.Append("\tErrorCode: " + se.ErrorCode + "\r\n");
                            sb.Append("\tMessage: " + se.Message + "\r\n");
                            sb.Append("\tStackTrace: " + se.StackTrace);
                            Console.WriteLine(sb.ToString());
                        }
#else
                        Console.WriteLine(" : " + status.Exception.Message);
                        //richTextBox1.AppendText(status.Exception.StackTrace);
#endif
                    }
                    Console.WriteLine("\r\n");
                    break;

                case HubStatus.Codes.Connected:
                    Console.WriteLine("*** Hub Connected");
                    break;

                case HubStatus.Codes.Connecting:
                    Console.WriteLine("*** Hub Connecting");
                    break;
                }
                break;

                #endregion
            default:
                Console.WriteLine(e.Data);
                break;
            }
        }