package tech.powerjob.server.remote.server; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.stereotype.Component; import tech.powerjob.common.response.AskResponse; import tech.powerjob.common.serialize.JsonUtils; import tech.powerjob.remote.framework.actor.Actor; import tech.powerjob.remote.framework.actor.Handler; import tech.powerjob.remote.framework.actor.ProcessType; import tech.powerjob.server.remote.aware.TransportServiceAware; import tech.powerjob.server.remote.server.election.Ping; import tech.powerjob.server.remote.server.redirector.RemoteProcessReq; import tech.powerjob.server.remote.server.redirector.RemoteRequestProcessor; import tech.powerjob.server.remote.transporter.TransportService; import static tech.powerjob.common.RemoteConstant.*; /** * 处理朋友们的信息(处理服务器与服务器之间的通讯) * * @author tjq * @since 2020/4/9 */ @Slf4j @Component @Actor(path = S4S_PATH) public class FriendActor implements TransportServiceAware { private TransportService transportService; /** * 处理存活检测的请求 */ @Handler(path = S4S_HANDLER_PING, processType = ProcessType.NO_BLOCKING) public AskResponse onReceivePing(Ping ping) { return AskResponse.succeed(transportService.allProtocols()); } @Handler(path = S4S_HANDLER_PROCESS, processType = ProcessType.BLOCKING) public AskResponse onReceiveRemoteProcessReq(RemoteProcessReq req) { AskResponse response = new AskResponse(); response.setSuccess(true); try { response.setData(JsonUtils.toBytes(RemoteRequestProcessor.processRemoteRequest(req))); } catch (Throwable t) { log.error("[FriendActor] process remote request[{}] failed!", req, t); response.setSuccess(false); response.setMessage(ExceptionUtils.getMessage(t)); } return response; } @Override public void setTransportService(TransportService transportService) { this.transportService = transportService; } }