static void ReplyThreadLoop() { while (true) { if (_clientProcIds.Count > 0) { lock (_syncLock) { var cpu = getCurrentCpuUsage(); var ram = getAvailableRAM(); foreach (var client in _clientProcIds) { var response = new ResponseMessage(client.Value.Item1); if ((CounterType.CPU & client.Value.Item2) == CounterType.CPU) { var reply = new CounterData() { Type = CounterType.CPU, Value = cpu }; response.SetBody<CounterData>(reply); IPCService.Instance.SendReply(response.Header.RequestHeader.ProcessID.ToString(), response); } if ((CounterType.MEMORY & client.Value.Item2) == CounterType.MEMORY) { var reply = new CounterData() { Type = CounterType.MEMORY, Value = ram }; response.SetBody<CounterData>(reply); IPCService.Instance.SendReply(response.Header.RequestHeader.ProcessID.ToString(), response); } } } } Thread.Sleep(1000); } }
public void Reply(ResponseMessage response) { var data = response.GetBody<CounterData>(); Console.WriteLine($"{data.Type} - {data.Value}"); }
public MessageRecievedEventArgs(RequestMessage request) { Request = request; Response = new ResponseMessage(Request.Header); }
/// <summary> /// Broadcast a message to all clients. /// </summary> /// <param name="response">Response message</param> /// <remarks>Only works with duplex clients</remarks> public void Broadcast(ResponseMessage response) { IIPCDuplexCallback notUsed = null; foreach (var replyChannel in _subscriptions) { try { replyChannel.Value.Reply(response); } catch (Exception ex) { Trace.WriteLine($"Reply to {response.Header.RequestHeader.ProcessID} failed with error: {ex.Message}"); _subscriptions.TryRemove(replyChannel.Key, out notUsed); } } }
/// <summary> /// Reply from the server to the client. /// </summary> /// <param name="clientID">Unique ID for the clients response channel.</param> /// <param name="response">Response</param> public void SendReply(string clientID, ResponseMessage response) { if (_subscriptions.ContainsKey(clientID)) { var replyChannel = _subscriptions[clientID]; try { replyChannel.Reply(response); } catch (Exception ex) { Trace.WriteLine($"Reply to {response.Header.RequestHeader.ProcessID} failed with error: {ex.Message}"); IIPCDuplexCallback notUsed = null; _subscriptions.TryRemove(clientID, out notUsed); } } }