コード例 #1
0
        static void Main(string[] args)
        {
            NetMQRuntime mqRuntime = new NetMQRuntime();

            mqRuntime.Run(Run(args));
        }
コード例 #2
0
ファイル: MessageSender.cs プロジェクト: LC95/DirectDo
 public MessageSender()
 {
     _runtime      = new NetMQRuntime();
     _dealerSocket = new(">tcp://127.0.0.1:5556");
     _dealerSocket.Options.Identity = Guid.NewGuid().ToByteArray();
 }
コード例 #3
0
 public void Run()
 {
     NetMQConfig.MaxSockets     = 1024;
     using NetMQRuntime runtime = new NetMQRuntime();
     runtime.Run(Task.Run(ServerAsync));
 }
コード例 #4
0
        public NetMQTransport(
            PrivateKey privateKey,
            AppProtocolVersion appProtocolVersion,
            IImmutableSet <PublicKey> trustedAppProtocolVersionSigners,
            int workers,
            string host,
            int?listenPort,
            IEnumerable <IceServer> iceServers,
            DifferentAppProtocolVersionEncountered differentAppProtocolVersionEncountered,
            TimeSpan?messageTimestampBuffer = null)
        {
            _logger = Log
                      .ForContext <NetMQTransport>()
                      .ForContext("Source", nameof(NetMQTransport));

            if (host is null && (iceServers is null || !iceServers.Any()))
            {
                throw new ArgumentException(
                          $"Swarm requires either {nameof(host)} or {nameof(iceServers)}.");
            }

            Running = false;

            _socketCount  = 0;
            _privateKey   = privateKey;
            _host         = host;
            _iceServers   = iceServers?.ToList();
            _listenPort   = listenPort ?? 0;
            _messageCodec = new NetMQMessageCodec(
                appProtocolVersion,
                trustedAppProtocolVersionSigners,
                differentAppProtocolVersionEncountered,
                messageTimestampBuffer);

            _requests = Channel.CreateUnbounded <MessageRequest>();
            _runtimeProcessorCancellationTokenSource = new CancellationTokenSource();
            _runtimeCancellationTokenSource          = new CancellationTokenSource();
            _turnCancellationTokenSource             = new CancellationTokenSource();
            _requestCount     = 0;
            _runtimeProcessor = Task.Factory.StartNew(
                () =>
            {
                // Ignore NetMQ related exceptions during NetMQRuntime.Dispose() to stabilize
                // tests
                try
                {
                    using var runtime  = new NetMQRuntime();
                    Task[] workerTasks = Enumerable
                                         .Range(0, workers)
                                         .Select(_ =>
                                                 ProcessRuntime(_runtimeProcessorCancellationTokenSource.Token))
                                         .ToArray();
                    runtime.Run(workerTasks);
                }
                catch (Exception e)
                    when(e is NetMQException nme || e is ObjectDisposedException ode)
                    {
                        _logger.Error(
                            e,
                            "An exception has occurred while running {TaskName}.",
                            nameof(_runtimeProcessor));
                    }
            },
                CancellationToken.None,
                TaskCreationOptions.DenyChildAttach | TaskCreationOptions.LongRunning,
                TaskScheduler.Default
                );

            ProcessMessageHandler   = new AsyncDelegate <Message>();
            _replyCompletionSources =
                new ConcurrentDictionary <string, TaskCompletionSource <object> >();
        }