Skip to content

Commit

Permalink
init project
Browse files Browse the repository at this point in the history
  • Loading branch information
闫逍旭 committed Dec 23, 2015
1 parent 5fa11df commit cb85f28
Show file tree
Hide file tree
Showing 24 changed files with 283 additions and 13 deletions.
10 changes: 10 additions & 0 deletions mpush-api/src/main/java/com/shinemo/mpush/api/Constants.java
@@ -0,0 +1,10 @@
package com.shinemo.mpush.api;

import java.nio.charset.Charset;

/**
* Created by ohun on 2015/12/23.
*/
public interface Constants {
Charset UTF_8 = Charset.forName("UTF-8");
}
5 changes: 5 additions & 0 deletions mpush-api/src/main/java/com/shinemo/mpush/api/Request.java
Expand Up @@ -30,6 +30,11 @@ public Connection getConnection() {
} }


public Response getResponse() { public Response getResponse() {
Packet packet = new Packet();
packet.command = message.command;
packet.msgId = message.msgId;
packet.version = message.version;
packet.msgType = message.msgType;
return new Response(packet, connection); return new Response(packet, connection);
} }
} }
11 changes: 11 additions & 0 deletions mpush-api/src/main/java/com/shinemo/mpush/api/Router.java
@@ -0,0 +1,11 @@
package com.shinemo.mpush.api;

/**
* Created by ohun on 2015/12/23.
*/
public interface Router {

Connection getConnect();

RouterInfo getRouterInfo();
}
20 changes: 20 additions & 0 deletions mpush-api/src/main/java/com/shinemo/mpush/api/RouterInfo.java
@@ -0,0 +1,20 @@
package com.shinemo.mpush.api;

/**
* Created by ohun on 2015/12/23.
*/
public class RouterInfo {
private String ip;

public RouterInfo(String ip) {
this.ip = ip;
}

public String getIp() {
return ip;
}

public void setIp(String ip) {
this.ip = ip;
}
}
13 changes: 13 additions & 0 deletions mpush-api/src/main/java/com/shinemo/mpush/api/RouterManager.java
@@ -0,0 +1,13 @@
package com.shinemo.mpush.api;

/**
* Created by ohun on 2015/12/23.
*/
public interface RouterManager {

boolean publish(long userId, Router route);

boolean unPublish(long userId);

Router getRouter(long userId);
}
Expand Up @@ -7,7 +7,10 @@ public enum Command {
Heartbeat(1), Heartbeat(1),
Handshake(2), Handshake(2),
Login(3), Login(3),
Kick(4), Logout(4),
Bind(5),
Unbind(6),
Kick(7),
Unknown(-1); Unknown(-1);


Command(int cmd) { Command(int cmd) {
Expand All @@ -17,7 +20,7 @@ public enum Command {
public final byte cmd; public final byte cmd;


public static Command toCMD(byte b) { public static Command toCMD(byte b) {
if (b > 0 && b < values().length) return values()[b - 1]; if (b > 0 && b < values().length - 1) return values()[b - 1];
return Unknown; return Unknown;
} }
} }
Expand Up @@ -27,6 +27,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
@Override @Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause); super.exceptionCaught(ctx, cause);
ConnectionManager.INSTANCE.remove(connection);
} }


@Override @Override
Expand Down
5 changes: 5 additions & 0 deletions mpush-core/pom.xml
Expand Up @@ -28,6 +28,11 @@
<artifactId>mpush-api</artifactId> <artifactId>mpush-api</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.shinemo.mpush</groupId>
<artifactId>mpush-gateway</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies> </dependencies>


</project> </project>
@@ -1,6 +1,6 @@
package com.shinemo.mpush.core; package com.shinemo.mpush.core;


import com.shinemo.mpush.api.protocol.Connection; import com.shinemo.mpush.api.Connection;
import com.shinemo.mpush.api.ConnectionInfo; import com.shinemo.mpush.api.ConnectionInfo;
import com.shinemo.mpush.api.protocol.Packet; import com.shinemo.mpush.api.protocol.Packet;
import io.netty.channel.Channel; import io.netty.channel.Channel;
Expand All @@ -23,8 +23,9 @@ public String getId() {
return channel.id().asShortText(); return channel.id().asShortText();
} }


public ChannelFuture send(Packet packet) { @Override
return null; public void send(Packet packet) {

} }


public ChannelFuture close() { public ChannelFuture close() {
Expand Down
@@ -1,6 +1,7 @@
package com.shinemo.mpush.core; package com.shinemo.mpush.core;


import com.shinemo.mpush.api.protocol.Connection;
import com.shinemo.mpush.api.Connection;


import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
Expand Down
Expand Up @@ -3,13 +3,15 @@
import com.shinemo.mpush.api.MessageHandler; import com.shinemo.mpush.api.MessageHandler;
import com.shinemo.mpush.api.Receiver; import com.shinemo.mpush.api.Receiver;
import com.shinemo.mpush.api.Request; import com.shinemo.mpush.api.Request;
import com.shinemo.mpush.core.handler.LoginMessageHandler; import com.shinemo.mpush.core.handler.BindHandler;
import com.shinemo.mpush.core.handler.LoginHandler;


/** /**
* Created by ohun on 2015/12/22. * Created by ohun on 2015/12/22.
*/ */
public class MessageReceiver implements Receiver { public class MessageReceiver implements Receiver {
public static final MessageHandler LOGIN_MESSAGE_HANDLER = new LoginMessageHandler(); public static final MessageHandler LOGIN_HANDLER = new LoginHandler();
public static final MessageHandler BIND_HANDLER = new BindHandler();


@Override @Override
public void onMessage(Request request) { public void onMessage(Request request) {
Expand All @@ -19,7 +21,10 @@ public void onMessage(Request request) {
case Handshake: case Handshake:
break; break;
case Login: case Login:
LOGIN_MESSAGE_HANDLER.handle(request); LOGIN_HANDLER.handle(request);
break;
case Bind:
BIND_HANDLER.handle(request);
break; break;
case Kick: case Kick:
break; break;
Expand Down
@@ -1,15 +1,14 @@
package com.shinemo.mpush.core.handler; package com.shinemo.mpush.core.handler;




import com.shinemo.mpush.api.Message;
import com.shinemo.mpush.api.MessageHandler; import com.shinemo.mpush.api.MessageHandler;
import com.shinemo.mpush.api.Request; import com.shinemo.mpush.api.Request;
import com.shinemo.mpush.api.protocol.Packet; import com.shinemo.mpush.api.protocol.Packet;


/** /**
* Created by ohun on 2015/12/22. * Created by ohun on 2015/12/22.
*/ */
public abstract class BaseMessageHandler<T extends Message> implements MessageHandler { public abstract class BaseMessageHandler<T> implements MessageHandler {
@Override @Override
public void handle(Request request) { public void handle(Request request) {


Expand Down
@@ -0,0 +1,23 @@
package com.shinemo.mpush.core.handler;

import com.shinemo.mpush.api.Constants;
import com.shinemo.mpush.api.Request;
import com.shinemo.mpush.api.protocol.Packet;
import com.shinemo.mpush.gateway.router.RouterCenter;

/**
* Created by ohun on 2015/12/23.
*/
public class BindHandler extends BaseMessageHandler<String> {
@Override
public String decodeBody(Packet packet) {
return new String(packet.body, Constants.UTF_8);
}

@Override
public void handle(String body, Request request) {
long userId = Long.parseLong(body);
boolean success = RouterCenter.INSTANCE.publish(userId, request.getConnection());
request.getResponse().send(new byte[]{success ? (byte) 1 : (byte) 0});
}
}
Expand Up @@ -7,7 +7,7 @@
/** /**
* Created by ohun on 2015/12/22. * Created by ohun on 2015/12/22.
*/ */
public class LoginMessageHandler extends BaseMessageHandler<LoginMessage> { public class LoginHandler extends BaseMessageHandler<LoginMessage> {
@Override @Override
public LoginMessage decodeBody(Packet packet) { public LoginMessage decodeBody(Packet packet) {
return new LoginMessage(); return new LoginMessage();
Expand Down
8 changes: 7 additions & 1 deletion mpush-gateway/pom.xml
Expand Up @@ -10,6 +10,12 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>


<artifactId>mpush-gateway</artifactId> <artifactId>mpush-gateway</artifactId>

<dependencies>
<dependency>
<groupId>com.shinemo.mpush</groupId>
<artifactId>mpush-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>


</project> </project>
@@ -0,0 +1,7 @@
package com.shinemo.mpush.gateway;

/**
* Created by ohun on 2015/12/23.
*/
public class GatewayServer {
}
@@ -0,0 +1,24 @@
package com.shinemo.mpush.gateway.router;

import com.shinemo.mpush.api.Connection;
import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.RouterInfo;

/**
* Created by ohun on 2015/12/23.
*/
public class LocalRouter implements Router {
private final Connection connection;

public LocalRouter(Connection connection) {
this.connection = connection;
}

public Connection getConnect() {
return connection;
}

public RouterInfo getRouterInfo() {
return null;
}
}
@@ -0,0 +1,28 @@
package com.shinemo.mpush.gateway.router;

import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.RouterManager;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
* Created by ohun on 2015/12/23.
*/
public class LocalRouterManager implements RouterManager {
private final Map<Long, Router> routerMap = new ConcurrentHashMap<Long, Router>();

public boolean publish(long userId, Router route) {
routerMap.put(userId, route);
return true;
}

public boolean unPublish(long userId) {
routerMap.remove(userId);
return true;
}

public Router getRouter(long userId) {
return routerMap.get(userId);
}
}
@@ -0,0 +1,24 @@
package com.shinemo.mpush.gateway.router;

import com.shinemo.mpush.api.Connection;
import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.RouterInfo;

/**
* Created by ohun on 2015/12/23.
*/
public class RemoteRouter implements Router {
private final RouterInfo routerInfo;

public RemoteRouter(RouterInfo routerInfo) {
this.routerInfo = routerInfo;
}

public Connection getConnect() {
return null;
}

public RouterInfo getRouterInfo() {
return null;
}
}
@@ -0,0 +1,22 @@
package com.shinemo.mpush.gateway.router;

import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.RouterManager;

/**
* Created by ohun on 2015/12/23.
*/
public class RemoteRouterManager implements RouterManager {

public boolean publish(long userId, Router route) {
return true;
}

public boolean unPublish(long userId) {
return true;
}

public Router getRouter(long userId) {
return null;
}
}
@@ -0,0 +1,34 @@
package com.shinemo.mpush.gateway.router;

import com.shinemo.mpush.api.Connection;
import com.shinemo.mpush.api.Router;
import com.shinemo.mpush.api.RouterInfo;

/**
* 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();

public boolean publish(long userId, Connection connection) {
localRouterManager.publish(userId, new LocalRouter(connection));
remoteRouterManager.publish(userId, new RemoteRouter(new RouterInfo("127.0.0.1")));
return true;
}

public boolean unPublish(long userId) {
localRouterManager.unPublish(userId);
remoteRouterManager.unPublish(userId);
return true;
}

public Router lookup(long userId) {
Router local = localRouterManager.getRouter(userId);
if (local != null) return local;
Router remote = remoteRouterManager.getRouter(userId);
return remote;
}
}
15 changes: 15 additions & 0 deletions mpush-tools/pom.xml
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mpush</artifactId>
<groupId>com.shinemo.mpush</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>mpush-tools</artifactId>


</project>

0 comments on commit cb85f28

Please sign in to comment.