Beispiel #1
0
        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>()
            //);
        }
Beispiel #2
0
        //呼叫端要準備一個函數,接收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();
        }