SocketRpcRequestHandlerRunnable.java 1.6 KB
Newer Older
S
shuang.kou 已提交
1
package github.javaguide.transport.socket;
2 3 4

import github.javaguide.dto.RpcRequest;
import github.javaguide.dto.RpcResponse;
5
import github.javaguide.handler.RpcRequestHandler;
6 7 8 9 10 11 12 13 14 15 16 17
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

/**
 * @author shuang.kou
 * @createTime 2020年05月10日 09:18:00
 */
S
shuang.kou 已提交
18 19
public class SocketRpcRequestHandlerRunnable implements Runnable {
    private static final Logger logger = LoggerFactory.getLogger(SocketRpcRequestHandlerRunnable.class);
20
    private Socket socket;
21
    private static final RpcRequestHandler rpcRequestHandler;
22

S
shuang.kou 已提交
23
    static {
24
        rpcRequestHandler = new RpcRequestHandler();
S
shuang.kou 已提交
25
    }
26

S
shuang.kou 已提交
27
    public SocketRpcRequestHandlerRunnable(Socket socket) {
28 29 30 31 32
        this.socket = socket;
    }

    @Override
    public void run() {
33
        logger.info(String.format("server handle message from client by thread: %s", Thread.currentThread().getName()));
34 35 36
        try (ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
             ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream())) {
            RpcRequest rpcRequest = (RpcRequest) objectInputStream.readObject();
37
            Object result = rpcRequestHandler.handle(rpcRequest);
38
            objectOutputStream.writeObject(RpcResponse.success(result, rpcRequest.getRequestId()));
39 40
            objectOutputStream.flush();
        } catch (IOException | ClassNotFoundException e) {
41
            logger.error("occur exception:", e);
42 43 44 45
        }
    }

}