private void SendMessage(string Message, int level = 2) { CicadaMsg message = new CicadaMsg(); message.id = Guid.NewGuid().ToString(); message.command = "log"; message.msg = classMsg + Message; message.level = level; StdInAndOut.SendMsg(message); //you can also wait the result adopt listen the needAckMessageIds queue. //var result = CicadaLaunch.WaitMsgBeAck(message.id, 60000); }
/// <summary> /// write lines to default stream. /// </summary> /// <param name="message">stdout</param> public static void SendMsg(CicadaMsg message) { if (message == null) { return; } lock (sendMsglock) //keep send msg together. { //fix output bug on mono. var encoding = new UTF8Encoding(false); Console.OutputEncoding = encoding; Console.WriteLine("cicadaMsg:" + JsonConvert.SerializeObject(message)); Console.WriteLine("cicadaMsg:end"); } }
private static Task <bool> StartWaitHeartBeat() { Task <bool> T = new Task <bool>(() => { while (true) { try { CicadaMsg msg = StdInAndOut.ReadMsg(); if (msg != null) { if (msg.IsHeartBeat()) { StdInAndOut.Sync(); } else if (msg.command == "ack" && !string.IsNullOrWhiteSpace(msg.id)) { DateTime startTime; needAckMessageIds.TryRemove(msg.id, out startTime); } } else { Thread.Sleep(50); } } catch (Exception ex) { Thread.Sleep(50); //do some thing and log it. } } }); return(T); }