예제 #1
0
        public override async Task <RunExecReply> RunExec(RunExecRequest request, ServerCallContext context)
        {
            await _semaphoreSlim.WaitAsync();

            var reply = new RunExecReply();

            try
            {
                using var memoryStream = new MemoryStream(request.SimConfig.Length);
                request.SimConfig.WriteTo(memoryStream);
                memoryStream.Position = 0;
                var simConfig = Serializer.Deserialize <SimConfig>(memoryStream);

                ROpsApi.RunExec(request.PathToCode, simConfig.SimCode, simConfig.SimInput);

                reply.Payload = new RunExecPayload();
            }
            catch (Exception ex)
            {
                reply.Error = PopulateError(ex);
                _logger.LogError(ex, nameof(RunExec));
            }
            finally
            {
                _semaphoreSlim.Release();
            }

            return(await Task.FromResult(reply));
        }