dubbo ExchangeHandlerDispatcher 源码
dubbo ExchangeHandlerDispatcher 代码
文件路径:/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/ExchangeHandlerDispatcher.java
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.dubbo.remoting.exchange.support;
import org.apache.dubbo.remoting.Channel;
import org.apache.dubbo.remoting.ChannelHandler;
import org.apache.dubbo.remoting.RemotingException;
import org.apache.dubbo.remoting.exchange.ExchangeChannel;
import org.apache.dubbo.remoting.exchange.ExchangeHandler;
import org.apache.dubbo.remoting.telnet.TelnetHandler;
import org.apache.dubbo.remoting.telnet.support.TelnetHandlerAdapter;
import org.apache.dubbo.remoting.transport.ChannelHandlerDispatcher;
import java.util.concurrent.CompletableFuture;
/**
* ExchangeHandlerDispatcher
*/
public class ExchangeHandlerDispatcher implements ExchangeHandler {
private final ReplierDispatcher replierDispatcher;
private final ChannelHandlerDispatcher handlerDispatcher;
private final TelnetHandler telnetHandler;
public ExchangeHandlerDispatcher() {
this(null, null);
}
public ExchangeHandlerDispatcher(Replier<?> replier) {
this(replier, null);
}
public ExchangeHandlerDispatcher(ChannelHandler... handlers) {
this(null, handlers);
}
public ExchangeHandlerDispatcher(Replier<?> replier, ChannelHandler... handlers) {
replierDispatcher = new ReplierDispatcher(replier);
handlerDispatcher = new ChannelHandlerDispatcher(handlers);
telnetHandler = new TelnetHandlerAdapter();
}
public ExchangeHandlerDispatcher addChannelHandler(ChannelHandler handler) {
handlerDispatcher.addChannelHandler(handler);
return this;
}
public ExchangeHandlerDispatcher removeChannelHandler(ChannelHandler handler) {
handlerDispatcher.removeChannelHandler(handler);
return this;
}
public <T> ExchangeHandlerDispatcher addReplier(Class<T> type, Replier<T> replier) {
replierDispatcher.addReplier(type, replier);
return this;
}
public <T> ExchangeHandlerDispatcher removeReplier(Class<T> type) {
replierDispatcher.removeReplier(type);
return this;
}
@Override
@SuppressWarnings({"unchecked", "rawtypes"})
public CompletableFuture<Object> reply(ExchangeChannel channel, Object request) throws RemotingException {
return CompletableFuture.completedFuture(((Replier) replierDispatcher).reply(channel, request));
}
@Override
public void connected(Channel channel) {
handlerDispatcher.connected(channel);
}
@Override
public void disconnected(Channel channel) {
handlerDispatcher.disconnected(channel);
}
@Override
public void sent(Channel channel, Object message) {
handlerDispatcher.sent(channel, message);
}
@Override
public void received(Channel channel, Object message) {
handlerDispatcher.received(channel, message);
}
@Override
public void caught(Channel channel, Throwable exception) {
handlerDispatcher.caught(channel, exception);
}
@Override
public String telnet(Channel channel, String message) throws RemotingException {
return telnetHandler.telnet(channel, message);
}
}
相关信息
相关文章
dubbo ExchangeHandlerAdapter 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦