public CClashResponse Transact(CClashRequest req) { Connect(); CClashResponse resp = null; req.pid = System.Diagnostics.Process.GetCurrentProcess().Id; var txbuf = req.Serialize(); ncs.Write(txbuf, 0, txbuf.Length); ncs.Flush(); var rx = new List <byte>(); var rxbuf = new byte[8192]; do { var rbytes = ncs.Read(rxbuf, 0, rxbuf.Length); rx.AddRange(rxbuf.Take(rbytes)); } while (!ncs.IsMessageComplete); if (rx.Count > 0) { resp = CClashMessage.Deserialize <CClashResponse>(rx.ToArray()); ncs.Close(); } return(resp); }
public void ServiceRequest(NamedPipeServerStream nss) { var msgbuf = new List <byte>(8192); var rxbuf = new byte[256 * 1024]; int count = 0; Logging.Emit("reading from client"); do { count = nss.Read(rxbuf, msgbuf.Count, rxbuf.Length); if (count > 0) { msgbuf.AddRange(rxbuf.Take(count)); } } while (!nss.IsMessageComplete); Logging.Emit("server read {0} bytes", msgbuf.Count); // deserialize message from msgbuf var req = CClashMessage.Deserialize <CClashRequest>(msgbuf.ToArray()); cache.Setup(); // needed? Logging.Emit("processing request"); var resp = ProcessRequest(req); Logging.Emit("request complete: supported={0}, exitcode={1}", resp.supported, resp.exitcode); var tx = resp.Serialize(); nss.Write(tx, 0, tx.Length); nss.Flush(); Logging.Emit("server written {0} bytes", tx.Length); nss.WaitForPipeDrain(); nss.Disconnect(); Logging.Emit("request done"); }
public static CacheManifest Deserialize(Stream stream) { return(CClashMessage.Deserialize <CacheManifest>(stream)); }