Skip to content

Commit

Permalink
增加用户绑定和路由踢人
Browse files Browse the repository at this point in the history
  • Loading branch information
ohun committed Dec 29, 2015
1 parent 31bd8e2 commit 4e865ac
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 18 deletions.
21 changes: 20 additions & 1 deletion mpush-api/src/main/java/com/shinemo/mpush/api/RouterManager.java
Expand Up @@ -5,9 +5,28 @@
*/ */
public interface RouterManager<R extends Router> { public interface RouterManager<R extends Router> {


/**
* 注册路由
*
* @param userId
* @param route
* @return
*/
R register(String userId, R route); R register(String userId, R route);


/**
* 删除路由
*
* @param userId
* @return
*/
boolean unRegister(String userId); boolean unRegister(String userId);


R getRouter(String userId); /**
* 查询路由
*
* @param userId
* @return
*/
R lookup(String userId);
} }
32 changes: 25 additions & 7 deletions mpush-api/src/main/java/com/shinemo/mpush/api/UserConnConfig.java
@@ -1,15 +1,24 @@
package com.shinemo.mpush.api; package com.shinemo.mpush.api;


import com.shinemo.mpush.tools.MPushUtil;

/** /**
* Created by ohun on 2015/12/23. * Created by ohun on 2015/12/23.
*/ */
public final class UserConnConfig { public final class UserConnConfig {
private String host; private String host;
private String osName; private String osName;
private String clientVer; private String clientVersion;
private String deviceId;


public UserConnConfig(String host) {
this.host = host; public String getDeviceId() {
return deviceId;
}

public UserConnConfig setDeviceId(String deviceId) {
this.deviceId = deviceId;
return this;
} }


public String getOsName() { public String getOsName() {
Expand All @@ -20,12 +29,12 @@ public void setOsName(String osName) {
this.osName = osName; this.osName = osName;
} }


public String getClientVer() { public String getClientVersion() {
return clientVer; return clientVersion;
} }


public void setClientVer(String clientVer) { public void setClientVersion(String clientVersion) {
this.clientVer = clientVer; this.clientVersion = clientVersion;
} }


public String getHost() { public String getHost() {
Expand All @@ -35,4 +44,13 @@ public String getHost() {
public void setHost(String host) { public void setHost(String host) {
this.host = host; this.host = host;
} }

public static UserConnConfig from(SessionContext context) {
UserConnConfig config = new UserConnConfig();
config.osName = context.osName;
config.clientVersion = context.clientVersion;
config.deviceId = context.deviceId;
config.host = MPushUtil.getLocalIp();
return config;
}
} }
Expand Up @@ -17,7 +17,7 @@
*/ */
public class MessageDispatcher implements PacketReceiver { public class MessageDispatcher implements PacketReceiver {
public static final Logger LOGGER = LoggerFactory.getLogger(MessageDispatcher.class); public static final Logger LOGGER = LoggerFactory.getLogger(MessageDispatcher.class);
public final BindHandler bindHandler = new BindHandler(); public final BindUserHandler bindUserHandler = new BindUserHandler();
public final HandShakeHandler handShakeHandler = new HandShakeHandler(); public final HandShakeHandler handShakeHandler = new HandShakeHandler();
public final FastConnectHandler fastConnectHandler = new FastConnectHandler(); public final FastConnectHandler fastConnectHandler = new FastConnectHandler();
public final HeartBeatHandler heartBeatHandler = new HeartBeatHandler(); public final HeartBeatHandler heartBeatHandler = new HeartBeatHandler();
Expand All @@ -34,7 +34,7 @@ public void onReceive(Packet packet, Connection connection) {
handShakeHandler.handle(new HandShakeMessage(packet, connection)); handShakeHandler.handle(new HandShakeMessage(packet, connection));
break; break;
case BIND: case BIND:
bindHandler.handle(new BindUserMessage(packet, connection)); bindUserHandler.handle(new BindUserMessage(packet, connection));
break; break;
case FAST_CONNECT: case FAST_CONNECT:
fastConnectHandler.handle(new FastConnectMessage(packet, connection)); fastConnectHandler.handle(new FastConnectMessage(packet, connection));
Expand Down
Expand Up @@ -11,7 +11,7 @@
/** /**
* Created by ohun on 2015/12/23. * Created by ohun on 2015/12/23.
*/ */
public final class BindHandler implements MessageHandler<BindUserMessage> { public final class BindUserHandler implements MessageHandler<BindUserMessage> {


@Override @Override
public void handle(BindUserMessage message) { public void handle(BindUserMessage message) {
Expand All @@ -24,7 +24,6 @@ public void handle(BindUserMessage message) {
boolean success = RouterCenter.INSTANCE.register(message.userId, message.getConnection()); boolean success = RouterCenter.INSTANCE.register(message.userId, message.getConnection());
if (success) { if (success) {
OkMessage.from(message).setData("bind success").send(); OkMessage.from(message).setData("bind success").send();
//TODO kick user
} else { } else {
ErrorMessage.from(message).setReason("bind failed").send(); ErrorMessage.from(message).setReason("bind failed").send();
} }
Expand Down
Expand Up @@ -23,7 +23,7 @@ public boolean unRegister(String userId) {
} }


@Override @Override
public LocalRouter getRouter(String userId) { public LocalRouter lookup(String userId) {
return routerMap.get(userId); return routerMap.get(userId);
} }
} }
Expand Up @@ -18,7 +18,7 @@ public boolean unRegister(String userId) {
} }


@Override @Override
public RemoteRouter getRouter(String userId) { public RemoteRouter lookup(String userId) {
return null; return null;
} }
} }
Expand Up @@ -15,9 +15,21 @@ public class RouterCenter {
private final LocalRouterManager localRouterManager = new LocalRouterManager(); private final LocalRouterManager localRouterManager = new LocalRouterManager();
private final RemoteRouterManager remoteRouterManager = new RemoteRouterManager(); private final RemoteRouterManager remoteRouterManager = new RemoteRouterManager();


/**
* 注册用户和链接
*
* @param userId
* @param connection
* @return
*/
public boolean register(String userId, Connection connection) { public boolean register(String userId, Connection connection) {
LocalRouter oldLocalRouter = localRouterManager.register(userId, new LocalRouter(connection)); UserConnConfig connConfig = UserConnConfig.from(connection.getSessionContext());
RemoteRouter oldRemoteRouter = remoteRouterManager.register(userId, new RemoteRouter(new UserConnConfig("127.0.0.1")));
LocalRouter localRouter = new LocalRouter(connection);
RemoteRouter remoteRouter = new RemoteRouter(connConfig);

LocalRouter oldLocalRouter = localRouterManager.register(userId, localRouter);
RemoteRouter oldRemoteRouter = remoteRouterManager.register(userId, remoteRouter);
if (oldLocalRouter != null) { if (oldLocalRouter != null) {
kickLocalUser(userId, oldLocalRouter); kickLocalUser(userId, oldLocalRouter);
} }
Expand All @@ -35,9 +47,9 @@ public boolean unRegister(String userId) {
} }


public Router<?> lookup(String userId) { public Router<?> lookup(String userId) {
LocalRouter local = localRouterManager.getRouter(userId); LocalRouter local = localRouterManager.lookup(userId);
if (local != null) return local; if (local != null) return local;
RemoteRouter remote = remoteRouterManager.getRouter(userId); RemoteRouter remote = remoteRouterManager.lookup(userId);
return remote; return remote;
} }


Expand Down

0 comments on commit 4e865ac

Please sign in to comment.