/// <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"); }
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."); }
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. } }
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))
//! //! 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(); }
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(); } } } } } }