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 })); }
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(); }
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; }
public HubStatus GetStatus(string hubName) { var requestData = new SoftEtherParameterCollection { { "HubName", hubName } }; var rawData = _softEther.CallMethod("GetHubStatus", requestData); return(HubStatus.Deserialize(rawData)); }
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); }
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(); }
internal HubConnectionStatus(ServerConfiguration configuration, bool isValid, HubStatus status, string message) : this(configuration, null, null, isValid, status, message) { }
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; } }