Esempio n. 1
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            SetupDefaultMimeTypes();

            _shell.Bind(_shellAddress);
            _ioPubSocket.Bind(_ioPubAddress);
            _stdIn.Bind(_stdInAddress);
            _control.Bind(_controlAddress);
            var kernelIdentity = Guid.NewGuid().ToString();

            Task.Run(async() =>
            {
                using var activity = Log.OnEnterAndExit();
                while (!cancellationToken.IsCancellationRequested)
                {
                    var request = _shell.GetMessage();

                    activity.Info("Received: {message}", request.ToJson());

                    SetBusy(request);

                    switch (request.Header.MessageType)
                    {
                    case JupyterMessageContentTypes.KernelInfoRequest:
                        kernelIdentity = Encoding.Unicode.GetString(request.Identifiers[0].ToArray());
                        HandleKernelInfoRequest(request);
                        SetIdle(request);
                        break;

                    case JupyterMessageContentTypes.KernelShutdownRequest:
                        SetIdle(request);
                        break;

                    default:
                        var context = new JupyterRequestContext(
                            _shellChannel,
                            _ioPubChannel,
                            _stdInChannel,
                            request,
                            kernelIdentity);

                        await _scheduler.Schedule(context);

                        await context.Done();

                        SetIdle(request);

                        break;
                    }
                }
            }, cancellationToken);

            void SetBusy(ZeroMQMessage request) => _ioPubChannel.Publish(new Status(StatusValues.Busy), request, kernelIdentity);
            void SetIdle(ZeroMQMessage request) => _ioPubChannel.Publish(new Status(StatusValues.Idle), request, kernelIdentity);

            return(Task.CompletedTask);
        }
Esempio n. 2
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _shell.Bind(_shellAddress);
            _ioPubSocket.Bind(_ioPubAddress);
            _stdIn.Bind(_stdInAddress);
            _control.Bind(_controlAddress);
            var id = Guid.NewGuid().ToString();

            using (var activity = Log.OnEnterAndExit())
            {
                SetStarting();
                while (!cancellationToken.IsCancellationRequested)
                {
                    var message = _shell.GetMessage();

                    activity.Info("Received: {message}", message.ToJson());

                    SetBusy();

                    switch (message.Header.MessageType)
                    {
                    case JupyterMessageContentTypes.KernelInfoRequest:
                        id = Encoding.Unicode.GetString(message.Identifiers[0].ToArray());
                        HandleKernelInfoRequest(message);
                        SetIdle();
                        break;

                    case JupyterMessageContentTypes.KernelShutdownRequest:
                        SetIdle();
                        break;

                    default:
                        var context = new JupyterRequestContext(
                            _shellSender,
                            _ioPubSender,
                            message, id);

                        await _scheduler.Schedule(context);

                        await context.Done();

                        SetIdle();

                        break;
                    }
                }

                void SetBusy() => _ioPubSender.Send(Message.Create(new Status(StatusValues.Busy), identifiers: new [] { Message.Topic("status", id) }));

                void SetIdle() => _ioPubSender.Send(Message.Create(new Status(StatusValues.Idle), identifiers: new[] { Message.Topic("status", id) }));

                void SetStarting() => _ioPubSender.Send(Message.Create(new Status(StatusValues.Starting), identifiers: new[] { Message.Topic("status", id) }));
            }
        }
Esempio n. 3
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _shell.Bind(_shellAddress);
            _ioPubSocket.Bind(_ioPubAddress);
            _stdIn.Bind(_stdInAddress);
            _control.Bind(_controlAddress);

            using (var activity = Log.OnEnterAndExit())
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    var message = _shell.GetMessage();

                    activity.Info("Received: {message}", message.ToJson());

                    SetBusy();

                    switch (message.Header.MessageType)
                    {
                    case JupyterMessageContentTypes.KernelInfoRequest:
                        HandleKernelInfoRequest(message);
                        SetIdle();
                        break;

                    case JupyterMessageContentTypes.KernelShutdownRequest:
                        SetIdle();
                        break;

                    default:
                        var context = new JupyterRequestContext(
                            _shellSender,
                            _ioPubSender,
                            message);

                        await _scheduler.Schedule(context);

                        await context.Done();

                        SetIdle();

                        break;
                    }

                    void SetBusy() => _shellSender.Send(Message.Create(new Status(StatusValues.Busy), message.Header));

                    void SetIdle() => _shellSender.Send(Message.Create(new Status(StatusValues.Busy), message.Header));
                }
            }
        }