2016-05-07 17 views
0

Pocoを使用して実装されたHTTPサーバーをテストするためのラッパーを作成しようとしています。サーバーはHTTPRequestHandlerのサブクラスを使用して実装され、handleRequestメソッドが実装されています。 handleRequestメソッドは、2つの引数HTTPServerRequestとHTTPServerResponseを取ります。Poco HTTPServerのhandleRequestをテストするためのラッパーはコンパイルされません。

handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) 

これらは両方とも抽象クラスです。私のラッパーでは、handleRequestメソッドを直接呼び出す必要があります。このような何か:

req_handler->handleRequest(&req, &res); 

私はHTTPServerRequestの親クラス、HTTPRequestのから継承されたread()メソッドを使用している要求を移入したい方法です。このように:

HTTPServerRequest req = new HTTPServerRequest(); 
char* buffer //populate this from std::cin 
std::istringstream iss(buffer); 
try { 
     req->read(iss); 
} 

しかし、問題は、彼らは抽象クラスなので、私は直接HTTPServerRequest/HTTPServerResponseのための「新しい」と呼ぶ傾けることです。私はHTTPServerRequestImplを使用しようとしましたが、純粋な仮想関数が実装されておらず、HTTPServerRequestImplにも空のコンストラクタがないというコンパイルエラーが発生します。私はこれを試しました:

HTTPServerRequest req = new HTTPServerRequestImpl() 

これも期待どおりのコンパイラエラーです。そのようなラッパーを書く正しい方法は何ですか? Pocoにサーバーを書くとき、どうやって理想的なのですか? ?私はちょうど、stdinから移入された要求でhandleRequestを呼び出す最小限のラッパーを必要とします。

答えて

0

HTTPServerRequestを直接使用する必要はありません。 HTTPClientSessionHTTPRequestを使用:

HTTPClientSession s("host", port); 
HTTPRequest request(HTTPRequest::HTTP_POST, "/"); 
std::string body("hello world\r\n0\r\n"); 
request.setContentLength((int) body.length()); 
s.sendRequest(request) << body; 
HTTPResponse response; 
std::istream& rs = s.receiveResponse(response); 
// ... 
関連する問題