public CompactResponse Compact(long rev, CompactOption option) { Etcdserverpb.CompactionRequest request = new Etcdserverpb.CompactionRequest(); request.Revision = rev; request.Physical = option.isPhysical(); var rsp = kVClient.Compact(request); CompactResponse response = new CompactResponse(rsp); return(response); //return Util.ToCompletableFutureWithRetry( // stub.Compact(request), // new FunctionResponse<Etcdserverpb.CompactionRequest, CompactResponse>() //); }
//呼叫端要準備一個函數,接收CompactRequest,回傳CompactResponse public MicroHttpServer(int port, Func <CompactRequest, CompactResponse> reqProc) { IPAddress ipAddr = IPAddress.Parse("0.0.0.0"); listener = new TcpListener(ipAddr, port); //另建Thread執行 serverThread = new Thread(() => { listener.Start(); while (true) { Socket s = listener.AcceptSocket(); NetworkStream ns = new NetworkStream(s); if (ns.ReadByte() < 0) { return; } //解讀Request內容 StreamReader sr = new StreamReader(ns); CompactRequest req = new CompactRequest(sr); //呼叫自訂的處理邏輯,得到要回傳的Response CompactResponse resp = reqProc(req); //傳回Response StreamWriter sw = new StreamWriter(ns); sw.WriteLine("HTTP/1.1 {0}", resp.StatusText); sw.WriteLine("Content-Type: " + resp.ContentType); foreach (string k in resp.Headers.Keys) { sw.WriteLine("{0}: {1}", k, resp.Headers[k]); } sw.WriteLine("Content-Length: {0}", resp.Data.Length); sw.WriteLine(); sw.Flush(); //寫入資料本體 s.Send(resp.Data); //結束連線 s.Shutdown(SocketShutdown.Both); ns.Close(); } }); serverThread.Start(); }