/
RouterCenter.java
68 lines (57 loc) · 2.21 KB
/
RouterCenter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.shinemo.mpush.gateway.router;
import com.shinemo.mpush.api.Connection;
import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.UserConnConfig;
import com.shinemo.mpush.api.SessionContext;
import com.shinemo.mpush.api.message.KickUserMessage;
/**
* Created by ohun on 2015/12/23.
*/
public class RouterCenter {
public static final RouterCenter INSTANCE = new RouterCenter();
private final LocalRouterManager localRouterManager = new LocalRouterManager();
private final RemoteRouterManager remoteRouterManager = new RemoteRouterManager();
/**
* 注册用户和链接
*
* @param userId
* @param connection
* @return
*/
public boolean register(String userId, Connection connection) {
UserConnConfig connConfig = UserConnConfig.from(connection.getSessionContext());
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) {
kickLocalUser(userId, oldLocalRouter);
}
if (oldRemoteRouter != null) {
kickRemoteUser(userId, oldRemoteRouter);
}
return true;
}
public boolean unRegister(String userId) {
localRouterManager.unRegister(userId);
remoteRouterManager.unRegister(userId);
return true;
}
public Router<?> lookup(String userId) {
LocalRouter local = localRouterManager.lookup(userId);
if (local != null) return local;
RemoteRouter remote = remoteRouterManager.lookup(userId);
return remote;
}
private void kickLocalUser(String userId, LocalRouter router) {
Connection connection = router.getRouteInfo();
SessionContext context = connection.getSessionContext();
KickUserMessage message = new KickUserMessage(connection);
message.deviceId = context.deviceId;
message.userId = userId;
message.send();
}
private void kickRemoteUser(String userId, RemoteRouter router) {
//send msg to zk
}
}