private async Task ReceivedCommunicationSetupJob(Memory <byte> buffer) { var data = S7CommSetupDatagram.TranslateFromMemory(buffer); using (var dg = S7CommSetupAckDataDatagram .TranslateToMemory( S7CommSetupAckDataDatagram .BuildFrom(_s7Context, data), out var memoryLength)) { using (var sendData = _transport.Build(dg.Memory.Slice(0, memoryLength), out var sendLength)) { var result = await _transport.Client.SendAsync(sendData.Memory.Slice(0, sendLength)).ConfigureAwait(false); if (result == SocketError.Success) { //UpdateConnectionState(ConnectionState.PendingOpenPlc); _s7Context.MaxAmQCalling = data.Parameter.MaxAmQCalling; _s7Context.MaxAmQCalled = data.Parameter.MaxAmQCalling; _s7Context.PduSize = data.Parameter.PduLength; if (_concurrentJobs != null) { _concurrentJobs.Dispose(); } _concurrentJobs = new SemaphoreSlim(_s7Context.MaxAmQCalling); await UpdateConnectionState(ConnectionState.Opened).ConfigureAwait(false); } } } }
private Task ReceivedCommunicationSetupJob(Memory <byte> buffer) { var data = S7CommSetupDatagram.TranslateFromMemory(buffer); Task.Run(() => HandleCommSetupAsync(data).ConfigureAwait(false)); return(Task.CompletedTask); }
private async Task StartS7CommunicationSetup() { using (var dgmem = S7CommSetupDatagram.TranslateToMemory(S7CommSetupDatagram.Build(_s7Context, GetNextReferenceId()), out var commemLength)) { using (var sendData = _transport.Build(dgmem.Memory.Slice(0, commemLength), out var sendLength)) { var result = await _transport.Client.SendAsync(sendData.Memory.Slice(0, sendLength)).ConfigureAwait(false); if (result == SocketError.Success) { await UpdateConnectionState(ConnectionState.PendingOpenPlc).ConfigureAwait(false); } } } }
private async Task StartCommunicationSetup() { var sendData = DataTransferDatagram .TranslateToMemory( DataTransferDatagram .Build(_context, S7CommSetupDatagram .TranslateToMemory( S7CommSetupDatagram .Build(_s7Context))) .FirstOrDefault()); var result = await _socket.SendAsync(sendData); if (result == SocketError.Success) { UpdateConnectionState(ConnectionState.PendingOpenPlc); } }
private async Task HandleCommSetupAsync(S7CommSetupDatagram data) { using (var dg = S7CommSetupAckDataDatagram .TranslateToMemory( S7CommSetupAckDataDatagram .BuildFrom(_s7Context, data, data.Header.ProtocolDataUnitReference), out var memoryLength)) { using (var sendData = _transport.Build(dg.Memory.Slice(0, memoryLength), out var sendLength)) { var result = await _transport.Connection.SendAsync(sendData.Memory.Slice(0, sendLength)).ConfigureAwait(false); if (result == SocketError.Success) { var oldSemaCount = _s7Context.MaxAmQCalling; _s7Context.MaxAmQCalling = data.Parameter.MaxAmQCalling; _s7Context.MaxAmQCalled = data.Parameter.MaxAmQCalled; _s7Context.PduSize = data.Parameter.PduLength; UpdateJobsSemaphore(oldSemaCount, _s7Context.MaxAmQCalling); await UpdateConnectionState(ConnectionState.Opened).ConfigureAwait(false); } } } }