Example #1
0
 /// <summary>
 /// 执行工作
 /// </summary>
 /// <param name="socket"></param>
 /// <returns>返回状态,其中-1会导致重连</returns>
 protected sealed override int DoWork(SubscriberSocket socket)
 {
     byte[] buffer;
     Debug.WriteLine(this.ZmqAddress);
     if (!socket.TryReceiveFrameBytes(timeOut, out buffer))
     {
         //Thread.SpinWait(1);
         return(0);
     }
     try
     {
         var reader = new CommandReader(buffer);
         reader.ReadCommandFromBuffer();
         var cmdMsg = reader.Command;
         try
         {
             var old = RpcEnvironment.SyncCacheCommand(cmdMsg);
             old?.OnRequestStateChanged(cmdMsg);
         }
         catch (Exception ex)
         {
             Trace.WriteLine(ex, GetType().Name + "MessageNotifyTask");
         }
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex, GetType().Name + "DoWork");
         return(-1);
     }
     return(0);
 }
 private void StatefullListenerEnqueueLoop()
 {
     OrLog(LogLevel.Verbose, "StatefullListenerEnqueueLoop start tcp://" + Room.ListenAddrV4 + ":" + Room.StatefullSubPort);
     AsyncIO.ForceDotNet.Force();
     using (var subSocket = new SubscriberSocket())
     {
         subSocket.Options.ReceiveHighWatermark = 1000;//default 1000
         subSocket.Connect("tcp://" + Room.ListenAddrV4 + ":" + Room.StatefullSubPort);
         subSocket.Subscribe("");
         while (!statefullListenerEnqueueCancelled)
         {
             try
             {
                 byte[] frameString;
                 if (!subSocket.TryReceiveFrameBytes(out frameString))
                 {
                     continue;
                 }
                 statefullQueue.Enqueue(frameString);
                 Thread.Yield();
             }
             catch (TerminatingException te)
             {
                 OrLogWarn(LogLevel.Verbose, "Terminating Exception: " + te.Message);
                 break;
             }
         }
         subSocket.Close();
     }
     NetMQConfig.Cleanup();
     OrLog(LogLevel.Verbose, "StatefullListenerEnqueueLoop end");
 }
Example #3
0
        private void Run()
        {
            using var publisher = new PublisherSocket();

            publisher.Bind(@"tcp://127.0.0.1:17232");

            using var subscriber = new SubscriberSocket();
            subscriber.Bind(@"tcp://127.0.0.1:17233");
            subscriber.SubscribeToAnyTopic();

            running.Set();

            using var server = new TelnetServer(IPAddress.Any, port, publisher, subscriber)
                  {
                      OptionReuseAddress = true
                  };

            Log.Information("Server starting ...");

            server.Start();

            while (running.WaitOne(TimeSpan.Zero))
            {
                if (subscriber.TryReceiveFrameBytes(TimeSpan.FromMilliseconds(100), out var frame))
                {
                    server.Multicast(frame);
                }
            }

            server.Stop();

            Log.Information("Server stopped.");
        }
Example #4
0
        private void Subscribe()
        {
            subscribing = true;

            subscriberSocket.Connect(@"tcp://127.0.0.1:17232");
            subscriberSocket.SubscribeToAnyTopic();

            while (subscribing)
            {
                if (subscriberSocket.TryReceiveFrameBytes(TimeSpan.FromMilliseconds(100), out var frame))
                {
                    teleprinter.Read(frame[^ 1]);
        private static void Main(string[] args)
        {
            var deciSecond = new TimeSpan(10000);

            using (var subscriber = new SubscriberSocket()) // For receiving updates from presentation host
                using (var publisher = new WSPublisher())   // For publishing updates from presentation host to audience
                    using (var responder = new WSRouter())  // Handling on-demand requests for late-joining or crashing clients
                    {
                        subscriber.Bind("tcp://*:3000");
                        subscriber.SubscribeToAnyTopic();
                        publisher.Bind("ws://*:3001");
                        responder.Bind("ws://*:3002");

                        byte step = 0;
                        subscriber.ReceiveReady += (_, __) => {
                            if (!subscriber.TryReceiveFrameBytes(deciSecond, out var received))
                            {
                                return;
                            }
                            step = received[0];
                            Console.Out.WriteLine("Sending " + step + " to audience.");
                            publisher.TrySendFrame(deciSecond, new[] { step });
                        };
                        responder.ReceiveReady += (_, __) => {
                            NetMQMessage msg = null;
                            if (!responder.TryReceiveMultipartMessage(deciSecond, ref msg))
                            {
                                return;
                            }
                            var identity = msg.Pop().Buffer;
                            var request  = msg.Pop().ConvertToString();
                            msg.Clear();
                            if (request == "Which slide are we on?")
                            {
                                responder.TrySendMultipartBytes(deciSecond, identity, new[] { step });
                            }
                            else
                            {
                                if (!responder.TrySendFrame(deciSecond, identity, true))
                                {
                                    return;
                                }
                                responder.TrySendFrameEmpty(deciSecond);
                            }
                        };
                        new NetMQPoller {
                            subscriber, responder
                        }.Run();                               // Polling both subscriber and router sockets.
                    }
        }
Example #6
0
        private void SubscribeThread()
        {
            // Place subscribe socket initialization inside thread to make all subscribe calls happen on the same thread
            // Trying to prevent "Cannot close an uninitialised Msg" exceptions
            _subscribeSocket = new SubscriberSocket();
            _subscribeSocket.Connect(_subscribeAddress);
            _subscribeSocket.SubscribeToAnyTopic();

            _subscribeThreadRunning = true;

            while (!_subscribeThreadCancellation.IsCancellationRequested)
            {
                try
                {
                    if (!_subscribeSocket.TryReceiveFrameBytes(new TimeSpan(0, 0, 0, 0, 200), out byte[] messageBytes))
Example #7
0
        //!
        //! client function, listening for messages in receiveMessageQueue from server (executed in separate thread)
        //!
        public void listener()
        {
            AsyncIO.ForceDotNet.Force();
            using (var receiver = new SubscriberSocket())
            {
                receiver.SubscribeToAnyTopic();

                //receiver.Subscribe("client");
                //receiver.Subscribe("ncam");
                //receiver.Subscribe("record");

                receiver.Connect("tcp://" + VPETSettings.Instance.serverIP + ":5556");

                lastReceiveTime = currentTimeTime;

                Debug.Log("Listener connected: " + "tcp://" + VPETSettings.Instance.serverIP + ":5556");
                byte[] input;
                while (isRunning)
                {
                    if (receiver.TryReceiveFrameBytes(out input))
                    {
                        //Thread.Sleep(100);
                        //this.receiveMessageQueue.Clear();
                        this.receiveMessageQueue.Add(input);

                        lastReceiveTime = currentTimeTime;
                    }
                    else
                    {
                        listenerRestartCount = Mathf.Min(int.MaxValue, listenerRestartCount + 1);
                        // VPETSettings.Instance.msg = string.Format("Exception in Listener: {0}", listenerRestartCount);
                        if (currentTimeTime - lastReceiveTime > receiveTimeout)
                        {
                            // break;
                        }
                    }
                }
                receiver.Disconnect("tcp://" + VPETSettings.Instance.serverIP + ":5556");
                receiver.Close();
                receiver.Dispose();
            }
            //NetMQConfig.Cleanup();
        }
Example #8
0
        private void GetEDDNData()
        {
            System.Diagnostics.Debug.WriteLine("Connecting..");
            using (StreamWriter file = new StreamWriter(Path.Combine(appdatapath, "EDDN" + DateTime.Now.ToString("yyyy-dd-MM-HH-mm-ss") + ".log")))
            {
                using (var subscriber = new SubscriberSocket())
                {
                    string endpoint = dev ? "tcp://beta.eddn.edcd.io:9520" : beta ? "tcp://beta.eddn.edcd.io:9510" : "tcp://eddn.edcd.io:9500";
                    BeginInvoke((MethodInvoker) delegate
                    {
                        dgv.Rows.Add(new object[] { "", "", "", "", "", endpoint });
                    });

                    file.WriteLine($"Listening to {endpoint}");

                    subscriber.Connect(endpoint);
                    subscriber.Subscribe(Encoding.Unicode.GetBytes(string.Empty));

                    System.Diagnostics.Debug.WriteLine("Connected");

                    while (!CloseThread)
                    {
                        byte[] response;
                        bool   rxed = false;
                        try
                        {
                            rxed = subscriber.TryReceiveFrameBytes(new TimeSpan(0, 0, 1), out response);
                        }
                        catch (NetMQException)
                        {
                            return;
                        }

                        if (rxed)
                        {
                            System.Diagnostics.Debug.WriteLine("Received");

                            var decompressedFileStream = new MemoryStream();
                            using (decompressedFileStream)
                            {
                                var stream = new MemoryStream(response);

                                // Don't forget to ignore the first two bytes of the stream (!)
                                stream.ReadByte();
                                stream.ReadByte();
                                using (var decompressionStream = new DeflateStream(stream, CompressionMode.Decompress))
                                {
                                    decompressionStream.CopyTo(decompressedFileStream);
                                }

                                decompressedFileStream.Position = 0;
                                var sr    = new StreamReader(decompressedFileStream);
                                var myStr = sr.ReadToEnd();

                                file.WriteLine(myStr);

                                JToken tk = JToken.Parse(myStr, JToken.ParseOptions.CheckEOL);
                                if (tk != null)
                                {
                                    string  schema  = tk["$schemaRef"].Str().ReplaceIfStartsWith("https://eddn.edcd.io/schemas/");
                                    JObject header  = tk["header"].Object();
                                    JObject message = tk["message"].Object();

                                    object[] rowt = { header["gatewayTimestamp"].Str(), schema,                     header["softwareName"].Str(), header["softwareVersion"].Str()
                                                      ,                                 header["uploaderID"].Str(), JToken.ToString(message,      ""," ", "", false) };

                                    BeginInvoke((MethodInvoker) delegate
                                    {
                                        dgv.Rows.Add(rowt);
                                        var row = dgv.Rows[dgv.Rows.Count - 1];
                                        if (checkBoxFollow.Checked)
                                        {
                                            dgv.CurrentCell = row.Cells[0];
                                        }
                                    });
                                }

                                decompressedFileStream.Position = 0;
                                decompressedFileStream.Close();
                            }
                        }
                    }
                }
            }
        }