Esempio n. 1
0
    public DeviceWorker(ILogger <DeviceWorker> logger, ISecsConnection hsmsConnection, ISecsGem secsGem)
    {
        _logger         = logger;
        _hsmsConnection = hsmsConnection;
        _secsGem        = secsGem;

        _hsmsConnection.ConnectionChanged += delegate
        {
            switch (_hsmsConnection.State)
            {
            case ConnectionState.Retry:
                _logger.LogError($"Connection loss, try to reconnect.");
                break;

            case ConnectionState.Connecting:
            case ConnectionState.Connected:
                _logger.LogWarning(_hsmsConnection.State.ToString());
                break;

            default:
                _logger.LogInformation($"Connection state = {_hsmsConnection.State}");
                break;
            }
        };
    }
Esempio n. 2
0
    private void SendAsyncManyMessagesAtOnce(ISecsConnection connection1, ISecsConnection connection2, CancellationToken cancellation)
    {
        var secsGem1 = new SecsGem(optionsActive, connection1, Substitute.For <ISecsGemLogger>());
        var secsGem2 = new SecsGem(optionsPassive, connection2, Substitute.For <ISecsGemLogger>());

        _ = Task.Run(async() =>
        {
            var pong = new SecsMessage(s: 1, f: 14, replyExpected: false)
            {
                SecsItem = A("Pong"),
            };

            await foreach (var a in secsGem2.GetPrimaryMessageAsync(cancellation))
            {
                await a.TryReplyAsync(pong);
            }
        });

        Func <Task> sendAsync = async() =>
        {
            var ping = new SecsMessage(s: 1, f: 13)
            {
                SecsItem = A("Ping"),
            };

            var sendCount  = 10000;
            var totalTasks = new List <Task <SecsMessage> >(capacity: sendCount);
            for (var g = 0; g < sendCount; g++)
            {
                totalTasks.Add(secsGem1.SendAsync(ping, cancellation).AsTask());
            }
            await Task.WhenAll(totalTasks.ToArray());
        };

        sendAsync.Should().NotThrowAsync();
    }