网络修改
parent
f8251f06cf
commit
01f0d514c7
|
@ -21,7 +21,7 @@ public class NetWorkFactory {
|
||||||
return new NettyGameServer(cfg, handler);
|
return new NettyGameServer(cfg, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static NettyGameClient getClient(MessageLite gameMessage, EndPortCfg cfg, INetWorkHandler handler) throws ConnectException {
|
public static NettyGameClient getClient(EndPortCfg cfg, INetWorkHandler handler) throws ConnectException {
|
||||||
return new NettyGameClient(gameMessage, cfg, handler);
|
return new NettyGameClient(cfg, handler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
public abstract class AbstractClient<T extends NettyGameSession> extends AbstractEndport {
|
public abstract class AbstractClient<T extends NettyGameSession> extends AbstractEndport {
|
||||||
protected Logger LOGGER = LoggerFactory.getLogger(AbstractClient.class);
|
protected Logger LOGGER = LoggerFactory.getLogger(AbstractClient.class);
|
||||||
//不对外暴露接口
|
//不对外暴露接口
|
||||||
private T gameSession;
|
|
||||||
private InetSocketAddress localAddress;
|
private InetSocketAddress localAddress;
|
||||||
final int readTimeout;
|
final int readTimeout;
|
||||||
final int writeTimeout;
|
final int writeTimeout;
|
||||||
|
@ -49,39 +48,31 @@ public abstract class AbstractClient<T extends NettyGameSession> extends Abstrac
|
||||||
@Override
|
@Override
|
||||||
public void connected(IChannel channel) {
|
public void connected(IChannel channel) {
|
||||||
|
|
||||||
if (handler instanceof INetSession) {
|
// if (handler instanceof INetSession) {
|
||||||
gameSession = ((INetSession<T>) handler).createGameSession(channel, handler);
|
// gameSession = ((INetSession<T>) handler).createGameSession(channel, handler);
|
||||||
if (null != gameSession) {
|
// if (null != gameSession) {
|
||||||
LOGGER.info("seission" + gameSession + "channelActive: " + gameSession.getChannel().getRemoteAddress() + " ,uid: " +
|
// LOGGER.info("seission" + gameSession + "channelActive: " + gameSession.getChannel().getRemoteAddress() + " ,uid: " +
|
||||||
gameSession.getUid() + " ,areaId: " + gameSession.getAreaId());
|
// gameSession.getUid() + " ,areaId: " + gameSession.getAreaId());
|
||||||
this.gameSession = gameSession;
|
// this.gameSession = gameSession;
|
||||||
String sessionId = gameSession.getId();
|
// String sessionId = gameSession.getId();
|
||||||
channel.setBindSessionId(sessionId);
|
// channel.setBindSessionId(sessionId);
|
||||||
gameSession.open();
|
// gameSession.open();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disconnected(IChannel channel) {
|
public void disconnected(IChannel channel) {
|
||||||
if (handler instanceof INetConnet) {
|
if (handler instanceof INetConnet) {
|
||||||
if (null != this.gameSession) {
|
((INetConnet) handler).offLine(null);
|
||||||
LOGGER.info("channelInactive->uid={},seission={},remoteAddress={}",
|
|
||||||
gameSession.getUid(), gameSession, gameSession.getChannel().getRemoteAddress());
|
|
||||||
((INetConnet) handler).offLine(gameSession);
|
|
||||||
gameSession.close();
|
|
||||||
gameSession = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void received(IChannel channel, Object msg) {
|
public void received(IChannel channel, Object msg) {
|
||||||
if (null != gameSession) {
|
((INetReceived) handler).onReceive(null,msg);
|
||||||
gameSession.received(msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -92,11 +83,8 @@ public abstract class AbstractClient<T extends NettyGameSession> extends Abstrac
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void idle(IChannel channel) {
|
public void idle(IChannel channel) {
|
||||||
|
|
||||||
if (handler instanceof INetConnet) {
|
if (handler instanceof INetConnet) {
|
||||||
if (null != gameSession) {
|
((INetConnet) handler).readIdel(null);
|
||||||
((INetConnet) handler).readIdel(gameSession);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,58 +1,32 @@
|
||||||
package com.ljsd.jieling.netty.server;
|
package com.ljsd.jieling.netty.server;
|
||||||
|
|
||||||
import com.google.protobuf.MessageLite;
|
import com.google.protobuf.MessageLite;
|
||||||
import com.ljsd.jieling.netty.NettyGameSession;
|
import com.ljsd.jieling.netty.cocdex.TeaDecoder;
|
||||||
import com.ljsd.jieling.netty.cocdex.Int32FrameDecoder;
|
import com.ljsd.jieling.netty.cocdex.TeaEncoder;
|
||||||
import com.ljsd.jieling.netty.cocdex.Int32LengthFieldPrepender;
|
|
||||||
import com.ljsd.jieling.netty.cocdex.PacketNetData;
|
|
||||||
import com.ljsd.jieling.netty.config.EndPortCfg;
|
import com.ljsd.jieling.netty.config.EndPortCfg;
|
||||||
import com.ljsd.jieling.netty.handler.GameMessageHandler;
|
import com.ljsd.jieling.netty.handler.GameMessageHandler;
|
||||||
import com.ljsd.jieling.netty.handler.ServerResponseMessageHandler;
|
import com.ljsd.jieling.protocol.INetWorkHandler;
|
||||||
import com.ljsd.jieling.protocol.*;
|
|
||||||
import com.ljsd.jieling.session.GameSession;
|
|
||||||
import com.ljsd.jieling.session.GameSessionFactory;
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
import io.netty.bootstrap.Bootstrap;
|
||||||
import io.netty.buffer.PooledByteBufAllocator;
|
import io.netty.buffer.PooledByteBufAllocator;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
import io.netty.channel.nio.NioEventLoopGroup;
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||||
import io.netty.handler.codec.protobuf.ProtobufDecoder;
|
|
||||||
import io.netty.handler.codec.protobuf.ProtobufEncoder;
|
|
||||||
import io.netty.handler.timeout.IdleStateHandler;
|
import io.netty.handler.timeout.IdleStateHandler;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import util.StringUtil;
|
|
||||||
import util.TimeUtils;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class NettyGameClient extends AbstractClient {
|
public class NettyGameClient extends AbstractClient {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(NettyGameClient.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(NettyGameClient.class);
|
||||||
private static Bootstrap bootstrap = null;
|
private static Bootstrap bootstrap = null;
|
||||||
//key位IP+Port的组合
|
|
||||||
private static Map<String, Channel> channels = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
private final MessageLite gameMessage;
|
|
||||||
|
|
||||||
// public NettyGameClient(int readTimeout, int writeTimeout,
|
|
||||||
// int allTimeout, MessageLite gameMessage, ProtocolsAbstract protocols, GameSessionFactory<T> sessionFactory) {
|
|
||||||
// super(readTimeout, writeTimeout, allTimeout);
|
|
||||||
//
|
|
||||||
// this.protocols = protocols;
|
|
||||||
// this.sessionFactory = sessionFactory;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
|
|
||||||
public NettyGameClient( MessageLite gameMessage, EndPortCfg endPortCfg, INetWorkHandler channelHandler) {
|
|
||||||
super(endPortCfg, channelHandler);
|
|
||||||
this.gameMessage = gameMessage;
|
|
||||||
|
|
||||||
|
public NettyGameClient(EndPortCfg endPortCfg, INetWorkHandler iNetWorkHandler) {
|
||||||
|
super(endPortCfg, iNetWorkHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public Channel start() {
|
||||||
try {
|
try {
|
||||||
EventLoopGroup group = new NioEventLoopGroup(1);
|
EventLoopGroup group = new NioEventLoopGroup(1);
|
||||||
bootstrap = new Bootstrap();
|
bootstrap = new Bootstrap();
|
||||||
|
@ -69,41 +43,20 @@ public class NettyGameClient extends AbstractClient {
|
||||||
protected void initChannel(Channel ch) throws Exception {
|
protected void initChannel(Channel ch) throws Exception {
|
||||||
|
|
||||||
ChannelPipeline p = ch.pipeline();
|
ChannelPipeline p = ch.pipeline();
|
||||||
|
p.addLast(new TeaDecoder());
|
||||||
p.addLast(new Int32FrameDecoder());
|
|
||||||
p.addLast(new ProtobufDecoder(gameMessage));
|
|
||||||
|
|
||||||
// 心跳检测处理
|
// 心跳检测处理
|
||||||
p.addLast(new IdleStateHandler(readTimeout, writeTimeout, allTimeout, TimeUnit.SECONDS));
|
p.addLast(new IdleStateHandler(readTimeout, writeTimeout, allTimeout, TimeUnit.SECONDS));
|
||||||
|
p.addLast(new TeaEncoder());
|
||||||
p.addLast(new Int32LengthFieldPrepender());
|
p.addLast(new GameMessageHandler(NettyGameClient.this));
|
||||||
p.addLast(new ProtobufEncoder());
|
// p.addLast(new ServerResponseMessageHandler(NettyGameClient.this));
|
||||||
|
|
||||||
p.addLast(new ServerResponseMessageHandler(NettyGameClient.this));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return bootstrap.connect(getLocalAddress().getHostName(),getLocalAddress().getPort()).sync().channel();//"39.100.38.60",16080).sync().channel();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("start->msg={}", e.getMessage(), e);
|
LOGGER.error("start->msg={}", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
public static Channel getChannel(String serverIp, int port) {
|
|
||||||
try {
|
|
||||||
String key = serverIp + ":" + port;
|
|
||||||
Channel channel = channels.get(key);
|
|
||||||
if(channel == null || !channel.isOpen() || !channel.isActive()) {
|
|
||||||
channel = bootstrap.connect(serverIp, port).sync().channel();
|
|
||||||
channels.put(key, channel);
|
|
||||||
}
|
|
||||||
return channel;
|
|
||||||
} catch (Exception e) {
|
|
||||||
LOGGER.error("getChannel->serverIp={},port={},msg={}", serverIp, port, e.getMessage(), e);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public static Channel getChannel(String serverIpPort) {
|
|
||||||
String strs[] = serverIpPort.split(":");
|
|
||||||
return getChannel(strs[0], Integer.parseInt(strs[1]));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
|
@ -111,4 +64,6 @@ public class NettyGameClient extends AbstractClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue