package com.erdaoya.springcloud.comx.boot.server;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.erdaoya.springcloud.comx.boot.BootStrap;
import com.erdaoya.springcloud.comx.utils.rest.RequestMessage;
import com.erdaoya.springcloud.comx.utils.rest.ResponseMessage;
import com.erdaoya.springcloud.comx.utils.rest.Url;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
/**
* Created by xue on 12/13/16.
*/
class ComxJettyHandler extends AbstractHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(ComxJettyServer.class);
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// build request and boot
HashMap<String,String> headers = new HashMap<>();
for (Enumeration headersNames = request.getHeaderNames(); headersNames.hasMoreElements();) {
String headerName = headersNames.nextElement().toString();
headers.put(headerName, request.getHeader(headerName));
}
try {
Url url = new Url(request.getRequestURL() + "?" + request.getQueryString());
String dataStr = request.getReader().lines().reduce("", (accumulator, actual) -> accumulator + actual);
JSONObject data = JSON.parseObject(dataStr);
RequestMessage requestMessage = new RequestMessage(url, request.getMethod(), data, headers, 0);
ResponseMessage responseMessage = BootStrap.start(requestMessage);
// 将服务器处理后的结果返回给调用URL的客户端
print(baseRequest, response, responseMessage);
//ResponseMessage responseMessage = new ResponseMessage(null, "", "200");
//print(baseRequest, response, responseMessage);
} catch (Exception ex) {
throw new IOException(ex.getMessage());
}
}
/**
* <pre>
* @param baseRequest
* @param response
* @param responseMessage 需要返回给客户的结果
* @throws IOException
* 将结果 result 返回给客户
* </pre>
*/
private void print(Request baseRequest, HttpServletResponse response, ResponseMessage responseMessage) throws IOException {
response.setContentType("text/json;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println(responseMessage.send());
}
}