예제 #1
0
        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);
        }
예제 #2
0
        public IAgent Execute(ConnectionArgument argument)
        {
            var agent = AgentBuilder.GetAgent(argument);

            agent.OnLogMessage = OnLogMessageReceived;
            agent.OnConnectionStatusChanged = OnConnectionStatusChangedReceived;
            InitProgressBar(argument.Connections);
            agent.StartAgent();
            return(agent);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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;
                }
            }
        }
예제 #6
0
 public AgentParts(ConnectionArgument argument)
 {
     this.argument = argument;
 }