public static IAgent GetAgent(ConnectionArgument argument) { var parts = new AgentParts(argument); parts.Compose(); return(parts.Agents.Where(agent => agent.Metadata.AgentName == argument.Agent).SingleOrDefault().Value); }
public IAgent Execute(ConnectionArgument argument) { var agent = AgentBuilder.GetAgent(argument); agent.OnLogMessage = OnLogMessageReceived; agent.OnConnectionStatusChanged = OnConnectionStatusChangedReceived; InitProgressBar(argument.Connections); agent.StartAgent(); return(agent); }
public static ConnectionArgument ConvertToLoadArgument(this List <ConsoleFlowResult> data) { var loadArgument = new ConnectionArgument(); var textParameters = data[0].Output as List <string>; loadArgument.Url = textParameters[0]; loadArgument.Hub = textParameters[1]; loadArgument.Connections = Convert.ToInt32(textParameters[2]); if (data[1].Output is ConsoleOptionsPageResult) { loadArgument.Agent = ((ConsoleOptionsPageResult)data[1].Output).SelectedText; } if (data[2].Output is ConsoleOptionsPageResult) { var selectedTransportIndex = ((ConsoleOptionsPageResult)data[2].Output).SelectedIndex; switch (selectedTransportIndex) { case 0: loadArgument.Transport = TransportType.WebSockets; break; case 1: loadArgument.Transport = TransportType.LongPolling; break; case 2: loadArgument.Transport = TransportType.ServerSentEvents; break; case 3: loadArgument.Transport = TransportType.Auto; break; } } if (data[3].Output is ConsoleOptionsPageResult) { var selectedClientTypeIndex = ((ConsoleOptionsPageResult)data[3].Output).SelectedIndex; switch (selectedClientTypeIndex) { case 0: loadArgument.ClientType = ClientType.SignalR; break; case 1: loadArgument.ClientType = ClientType.SignalRCore; break; } } return(loadArgument); }
public async Task CreateAndStartConnection(ConnectionArgument argument, Tuple <string, Func <string, Task <object[]> > > methodToInvoke = null) { string url = string.Empty; if (argument.Url.EndsWith("/")) { url = argument.Url + argument.Hub; } else { url = $"{argument.Url}/{argument.Hub}"; } connection = new HubConnectionBuilder() .WithUrl(url, GetTransportType(argument.Transport)) .Build(); token = new CancellationToken(); connection.Closed += _connection_Closed; for (int connectCount = 0; connectCount < 2; connectCount++) { if (!token.IsCancellationRequested) { try { await connection.StartAsync(token); connectionStatus = ConnectionStatus.Connected; break; } catch (Exception ex) { OnLogMessage?.Invoke(new EventMessageInfo("Failed to create connection. Will attempt to reconnect...", MessageType.Error)); logger.Error(ex); } await Task.Delay(1000); } } }
public async Task CreateAndStartConnection(ConnectionArgument argument, Tuple <string, Func <string, Task <object[]> > > methodToInvoke = null) { var connection = new HubConnection(argument.Url); proxy = connection.CreateHubProxy(argument.Hub); this.connection = connection; token = new CancellationTokenSource(); this.connection.Closed += OnClosedInternal; for (int connectCount = 0; connectCount < 2; connectCount++) { if (!token.IsCancellationRequested) { try { await this.connection.Start(GetTransportType(argument.Transport)); if (methodToInvoke != null) { await InvokeMethod(methodToInvoke.Item1, methodToInvoke.Item2); } break; } catch (Exception ex) { OnLogMessage?.Invoke(new EventMessageInfo("Failed to create connection. Will attempt to reconnect...", MessageType.Error)); logger.Error(ex); } await Task.Delay(1000); } else { break; } } }
public AgentParts(ConnectionArgument argument) { this.argument = argument; }