mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-13 08:16:04 +00:00
feat[gateway]: gateway attachment support signal only
This commit is contained in:
1 parent
384b79d58d
commit
018083fdb8
4 files changed
+40
-7
No files matched your search
@@ -81,10 +81,10 @@ public class GatewayRouteHandler extends ServerRouteHandler {
|
||||
throw new IllegalArgumentException(StringUtils.format(" session:{}发送了一个非法包[{}]", SessionUtils.sessionSimpleInfo(ctx), JsonUtils.object2String(packet)));
|
||||
}
|
||||
|
||||
var signalAttachment = (SignalAttachment) decodedPacketInfo.getAttachment();
|
||||
|
||||
// 把客户端信息包装为一个GatewayAttachment,因此通过这个网关附加包可以得到玩家的uid、sid之类的信息
|
||||
var gatewayAttachment = new GatewayAttachment(session, signalAttachment);
|
||||
var gatewayAttachment = new GatewayAttachment(session);
|
||||
gatewayAttachment.wrapAttachment(decodedPacketInfo.getAttachment());
|
||||
|
||||
// 网关优先使用IGatewayLoadBalancer作为一致性hash的计算参数,然后才会使用客户端的session做参数
|
||||
// 例子:以聊天服务来说,玩家知道自己在哪个群组groupId中,那往这个群发送消息时,会在Packet中带上这个groupId做为一致性hash就可以了。
|
||||
|
||||
@@ -125,10 +125,10 @@ public class Router implements IRouter {
|
||||
gatewaySession.setUid(uid);
|
||||
EventBus.post(AuthUidToGatewayEvent.valueOf(gatewaySession.getSid(), uid));
|
||||
|
||||
NetContext.getRouter().send(session, AuthUidToGatewayConfirm.valueOf(uid), new GatewayAttachment(gatewaySession, null));
|
||||
NetContext.getRouter().send(session, AuthUidToGatewayConfirm.valueOf(uid), new GatewayAttachment(gatewaySession));
|
||||
return;
|
||||
}
|
||||
send(gatewaySession, packet, signalAttachmentInGatewayAttachment);
|
||||
send(gatewaySession, packet, gatewayAttachment.attachment());
|
||||
} else {
|
||||
logger.error("gateway receives packet:[{}] and attachment:[{}] from server" + ", but serverSessionMap has no session[id:{}], perhaps client disconnected from gateway.", JsonUtils.object2String(packet), JsonUtils.object2String(attachment), gatewayAttachment.getSid());
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
package com.zfoo.net.router.attachment;
|
||||
|
||||
import com.zfoo.net.session.Session;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* @author godotg
|
||||
@@ -50,16 +49,16 @@ public class GatewayAttachment implements IAttachment {
|
||||
* CN:客户端发到网关的可能是一个带有同步或者异步的附加包,网关转发的时候需要把这个附加包给带上
|
||||
*/
|
||||
private SignalAttachment signalAttachment;
|
||||
private SignalOnlyAttachment signalOnlyAttachment;
|
||||
|
||||
|
||||
public GatewayAttachment() {
|
||||
}
|
||||
|
||||
public GatewayAttachment(Session session, @Nullable SignalAttachment signalAttachment) {
|
||||
public GatewayAttachment(Session session) {
|
||||
this.client = true;
|
||||
this.sid = session.getSid();
|
||||
this.uid = session.getUid();
|
||||
this.signalAttachment = signalAttachment;
|
||||
}
|
||||
|
||||
public GatewayAttachment(long sid, long uid) {
|
||||
@@ -91,6 +90,31 @@ public class GatewayAttachment implements IAttachment {
|
||||
this.taskExecutorHashParam = argument.hashCode();
|
||||
}
|
||||
|
||||
public void wrapAttachment(IAttachment attachment) {
|
||||
if (attachment == null) {
|
||||
return;
|
||||
}
|
||||
switch (attachment.packetType()) {
|
||||
case SIGNAL_ONLY_PACKET:
|
||||
signalOnlyAttachment = (SignalOnlyAttachment) attachment;
|
||||
break;
|
||||
case SIGNAL_PACKET:
|
||||
signalAttachment = (SignalAttachment) attachment;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
public IAttachment attachment() {
|
||||
if (signalAttachment != null) {
|
||||
return signalAttachment;
|
||||
}
|
||||
if (signalOnlyAttachment != null) {
|
||||
return signalOnlyAttachment;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public long getSid() {
|
||||
return sid;
|
||||
}
|
||||
@@ -139,4 +163,12 @@ public class GatewayAttachment implements IAttachment {
|
||||
public void setSignalAttachment(SignalAttachment signalAttachment) {
|
||||
this.signalAttachment = signalAttachment;
|
||||
}
|
||||
|
||||
public SignalOnlyAttachment getSignalOnlyAttachment() {
|
||||
return signalOnlyAttachment;
|
||||
}
|
||||
|
||||
public void setSignalOnlyAttachment(SignalOnlyAttachment signalOnlyAttachment) {
|
||||
this.signalOnlyAttachment = signalOnlyAttachment;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
<module id="1" name="native" minId="0" maxId="100">
|
||||
<protocol location="com.zfoo.net.router.attachment.SignalAttachment"/>
|
||||
<protocol location="com.zfoo.net.router.attachment.SignalOnlyAttachment"/>
|
||||
<protocol location="com.zfoo.net.router.attachment.GatewayAttachment"/>
|
||||
<protocol location="com.zfoo.net.router.attachment.UdpAttachment"/>
|
||||
<protocol location="com.zfoo.net.router.attachment.HttpAttachment"/>
|
||||
|
||||
Reference in new issue
Block a user