diff --git a/pom.xml b/pom.xml index 5d20beb..5241cc2 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,16 @@ mysql-connector-java 8.0.24 + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + 1.2.5 + + + com.google.code.gson + gson + 2.9.0 + diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java b/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java index b304976..e804e41 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/ImServerApplication.java @@ -1,5 +1,6 @@ package cn.org.bjca.trust.java.imserver; +import cn.org.bjca.trust.java.imserver.im.ImManager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @@ -10,6 +11,7 @@ public class ImServerApplication { public static void main(String[] args) { SpringApplication.run(ImServerApplication.class, args); + ImManager.getInstance().connect(); } } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/common/SpringUtilsAuTo.java b/src/main/java/cn/org/bjca/trust/java/imserver/common/SpringUtilsAuTo.java new file mode 100644 index 0000000..6e5b0ed --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/common/SpringUtilsAuTo.java @@ -0,0 +1,98 @@ +package cn.org.bjca.trust.java.imserver.common; + +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.stereotype.Component; + +@Component +public class SpringUtilsAuTo implements BeanFactoryPostProcessor { + /** + * Spring应用上下文环境 + */ + private static ConfigurableListableBeanFactory beanFactory; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + SpringUtilsAuTo.beanFactory = beanFactory; + } + + /** + * 获取对象 + * + * @param name + * @return Object 一个以所给名字注册的bean的实例 + * @throws BeansException + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException { + return (T) beanFactory.getBean(name); + } + + /** + * 获取类型为requiredType的对象 + * + * @param clz + * @return + * @throws BeansException + */ + public static T getBean(Class clz) throws BeansException { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) { + return beanFactory.containsBean(name); + } + + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + * @throws NoSuchBeanDefinitionException + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 注册对象的类型 + * @throws NoSuchBeanDefinitionException + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException { + return beanFactory.getType(name); + } + + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + * @return + * @throws NoSuchBeanDefinitionException + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { + return beanFactory.getAliases(name); + } + + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) { + return (T) AopContext.currentProxy(); + } +} + diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/common/json/GsonImplHelp.java b/src/main/java/cn/org/bjca/trust/java/imserver/common/json/GsonImplHelp.java new file mode 100644 index 0000000..8ca5f7d --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/common/json/GsonImplHelp.java @@ -0,0 +1,54 @@ +package cn.org.bjca.trust.java.imserver.common.json; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by xuqm on 2016/6/3. + */ +public class GsonImplHelp extends Json { + private final Gson gson = new Gson(); + + @Override + public String toJson(Object src) { + return gson.toJson(src); + + } + + @Override + public T toObject(String json, Class claxx) { + return gson.fromJson(json, claxx); + + } + + @Override + public T toObject(byte[] bytes, Class claxx) { + return gson.fromJson(new String(bytes), claxx); + + } + + public List toList(String json, Class clazz) { + JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray(); + + List list = new ArrayList<>(); + for (JsonElement jsonElement : jsonArray) { + list.add(gson.fromJson(jsonElement, clazz)); //cls + } + + return list; + + + } + + public static List stringToArray(String s, Class cls) { + T[] array = new Gson().fromJson(s, cls); + return Arrays.asList(array); + } + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/common/json/Json.java b/src/main/java/cn/org/bjca/trust/java/imserver/common/json/Json.java new file mode 100644 index 0000000..481fc04 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/common/json/Json.java @@ -0,0 +1,29 @@ +package cn.org.bjca.trust.java.imserver.common.json; + +import java.util.List; + +/** + * Created by xuqm on 2016/6/3. + */ +public abstract class Json { + private static Json json; + + Json() { + } + + public static Json get() { + if (json == null) { + json = new GsonImplHelp(); + } + return json; + } + + public abstract String toJson(Object src); + + public abstract T toObject(String json, Class claxx); + + public abstract T toObject(byte[] bytes, Class claxx); + + public abstract List toList(String json, Class claxx); + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/LoginData.java b/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/LoginData.java index 1c4695c..9c4ee09 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/LoginData.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/LoginData.java @@ -1,19 +1,19 @@ package cn.org.bjca.trust.java.imserver.controller.user.v1; +import cn.org.bjca.trust.java.imserver.entitys.UserInfo; + public class LoginData { private String host; private String port; - private String clientId; - private String token; + private UserInfo userInfo; public LoginData() { } - public LoginData(String host, String port, String clientId, String token) { + public LoginData(String host, String port, UserInfo userInfo) { this.host = host; this.port = port; - this.clientId = clientId; - this.token = token; + this.userInfo = userInfo; } public String getHost() { @@ -32,19 +32,11 @@ public class LoginData { this.port = port; } - public String getClientId() { - return clientId; + public UserInfo getUserInfo() { + return userInfo; } - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; + public void setUserInfo(UserInfo userInfo) { + this.userInfo = userInfo; } } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java b/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java index 28bcb60..961ed08 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/controller/user/v1/UserV1Controller.java @@ -24,8 +24,8 @@ public class UserV1Controller { @Autowired private ApplicationRepository applicationRepository; - @PostMapping("/login") - public HttpResult login(@RequestBody LoginBean user, @RequestHeader HttpHeaders headers) throws Exception { + @PostMapping("/register") + public HttpResult register(@RequestBody LoginBean user, @RequestHeader HttpHeaders headers) throws Exception { String appid = headers.getFirst("appid"); String userid = headers.getFirst("userid"); String ostype = headers.getFirst("ostype"); @@ -39,6 +39,7 @@ public class UserV1Controller { System.out.println("-----------------用户不存在------------------"); userInfo = new UserInfo(); userInfo.setUserId(userid); + userInfo.setNickName(userid); userInfo.setUserName(UUID.randomUUID().toString()); userInfo.setAppId(appid); userInfo.setOsType(ostype); @@ -52,7 +53,7 @@ public class UserV1Controller { } - return new HttpResult<>(200, "成功", new LoginData("114.115.203.60", "18883", userInfo.getUserName(), userInfo.getPassword())); + return new HttpResult<>(200, "成功", new LoginData("114.115.203.60", "18883", userInfo)); } else { return new HttpResult<>(201, "参数错误", new LoginData()); } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java index 1e982e1..90d5b5d 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/entitys/AbstractBaseTimeEntity.java @@ -27,8 +27,8 @@ public abstract class AbstractBaseTimeEntity { @CreatedDate @Column(nullable = false, updatable = false) - private LocalDateTime createTime; + private transient LocalDateTime createTime; @LastModifiedDate @Column() - private LocalDateTime updateTime; + private transient LocalDateTime updateTime; } diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/enums/PacketType.java b/src/main/java/cn/org/bjca/trust/java/imserver/enums/PacketType.java new file mode 100644 index 0000000..5450e3c --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/enums/PacketType.java @@ -0,0 +1,40 @@ +package cn.org.bjca.trust.java.imserver.enums; + +public enum PacketType { + //连接请求 + CONNECT(10), + CONNECTED(11), + //发送消息 + SEND(20), + SEND_ACK(21), + ARRIVE(30), + ARRIVE_ACK(31), + //心跳包 + PING(40), + PANG(41), + //数据请求 + REQUEST(50), + RESULT(51), + //系统通知 + SYSTEM(60), + SYSTEM_ACK(61), + UNKNOWN(-1); + + private int type = -1; + PacketType(final int type) { + this.type = type; + } + + public int type() { + return this.type; + } + + public static PacketType getType(final int type) { + for (final PacketType value : PacketType.values()) { + if (value.type == type) { + return value; + } + } + return UNKNOWN; + } +} \ No newline at end of file diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java new file mode 100644 index 0000000..159feff --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/ImManager.java @@ -0,0 +1,153 @@ +package cn.org.bjca.trust.java.imserver.im; + + +import cn.org.bjca.trust.java.imserver.common.SpringUtilsAuTo; +import cn.org.bjca.trust.java.imserver.common.json.GsonImplHelp; +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; +import cn.org.bjca.trust.java.imserver.im.msg.ConnectMessage; +import cn.org.bjca.trust.java.imserver.im.msg.ConnectedMessage; +import cn.org.bjca.trust.java.imserver.im.msg.msg.SZYXMessage; +import cn.org.bjca.trust.java.imserver.im.msg.msg.SendAckMessage; +import cn.org.bjca.trust.java.imserver.repository.UserRepository; +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +import java.nio.charset.StandardCharsets; + +public class ImManager { + + private final UserRepository userRepository = SpringUtilsAuTo.getBean(UserRepository.class); + + public static ImManager getInstance() { + return ImManagerHolder.instance; + } + + private static final class ImManagerHolder { + static final ImManager instance = new ImManager(); + } + + private MqttClient mqttClient; + private final MqttConnectOptions connectOptions; + + public ImManager() { + connectOptions = new MqttConnectOptions(); + connectOptions.setCleanSession(false); + connectOptions.setUserName("server"); + connectOptions.setPassword("server".toCharArray()); + connectOptions.setConnectionTimeout(30); + connectOptions.setKeepAliveInterval(10); + connectOptions.setAutomaticReconnect(true); + + + try { + mqttClient = new MqttClient("tcp://114.115.203.60:18883", + "server" + System.currentTimeMillis(), new MemoryPersistence()); + mqttClient.setCallback(new MqttCallbackExtended() { + @Override + public void connectComplete(boolean reconnect, String serverURI) { + System.out.println("======>connectComplete:reconnect?" + reconnect + "::" + serverURI); + if (reconnect) return; + try { + mqttClient.subscribe("server" + PacketType.CONNECT, 2); + mqttClient.subscribe("server" + PacketType.SEND, 2); + mqttClient.subscribe("server" + PacketType.PING, 2); + mqttClient.subscribe("server" + PacketType.REQUEST, 2); + } catch (MqttException ignored) { + } + } + + @Override + public void connectionLost(Throwable cause) { + System.out.println("======>connectionLost" + cause.getMessage()); + } + + @Override + public void messageArrived(String topic, MqttMessage message) throws Exception { + String msg = new String(message.getPayload()); + if (topic.equals("server" + PacketType.CONNECT)) { + sendConnectedMsg(GsonImplHelp.get().toObject(msg, ConnectMessage.class)); + } else if (topic.equals("server" + PacketType.SEND)) { + SZYXMessage szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class); + + if (!szyxMessage.isGroup()) { +// List userInfoList = userRepository.findAllByUserIdAndAppId(szyxMessage.getToClientId(), szyxMessage.getAppId()); + +// for (UserInfo userInfo : userInfoList) { + SZYXMessage message1 = szyxMessage.copy(); + message1.setUserName(szyxMessage.getToClientId()); + message1.setArrive(true); + message1.setStatus(0); +// sendPacketMessage(szyxMessage.getPacketType(), message1); +// } + sendPacketMessage(szyxMessage.getPacketType(), message1); + } + // TODO: 这里应该有计时器,判断转发消息是否送达,如果没送达则ack返回失败状态 + sendAckMsg(szyxMessage); + + } else + System.out.println("======>messageArrived:\n" + topic + "::" + msg); + + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { + } + + }); + } catch (MqttException e) { + System.out.println("======>MqttException" + e.getMessage()); + } + + } + + public void connect() { + new Thread(() -> { + try { + if (!mqttClient.isConnected()) { + mqttClient.connect(connectOptions); + } + } catch (MqttException e) { + System.out.println("======>connect" + e.getMessage()); + } + } + ).start(); + } + + + private void sendConnectedMsg(ConnectMessage connectMessage) { + ConnectedMessage message = new ConnectedMessage(); + message.setStatus(200); + message.setAppId(connectMessage.getAppId()); + message.setUserName(connectMessage.getUserName()); + sendPacketMessage(PacketType.CONNECTED, message); + System.out.println("======>登录成功\n" + GsonImplHelp.get().toJson(message)); + } + + private void sendAckMsg(SZYXMessage szyxMessage) { + SendAckMessage message = new SendAckMessage(); + message.setAckId(szyxMessage.getMsgId()); + message.setAckStatus(0); + message.setAppId(szyxMessage.getAppId()); + message.setUserName(szyxMessage.getUserName()); + sendPacketMessage(PacketType.SEND_ACK, message); + } + + private void sendPacketMessage(PacketType packetType, PacketMessage message) { + if (null == connectOptions) { + return; + } + String msg = GsonImplHelp.get().toJson(message); + try { + String topic = message.getAppId() + "/" + packetType + message.getUserName(); + mqttClient.publish(topic, msg.getBytes(StandardCharsets.UTF_8), 2, false); + + System.out.println("======>发送消息:\n" + topic + "\n" + msg); + } catch (MqttException ignored) { + + } + + } + + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java new file mode 100644 index 0000000..39f5ba3 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/bean/PacketMessage.java @@ -0,0 +1,61 @@ +package cn.org.bjca.trust.java.imserver.im.bean; + + +import cn.org.bjca.trust.java.imserver.enums.PacketType; + +import java.util.UUID; + +public abstract class PacketMessage { + /** + * 消息id + */ + private String msgId = UUID.randomUUID().toString(); + private PacketType packetType; + private long timestamp = System.currentTimeMillis(); + private String appId; + private String userName; + + public PacketMessage(PacketType packetType) { + this.packetType = packetType; + } + + public String getMsgId() { + return msgId; + } + + public void setMsgId(String msgId) { + this.msgId = msgId; + } + + public PacketType getPacketType() { + return packetType; + } + + public void setPacketType(PacketType packetType) { + this.packetType = packetType; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java new file mode 100644 index 0000000..c094f75 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectMessage.java @@ -0,0 +1,26 @@ +package cn.org.bjca.trust.java.imserver.im.msg; + + +import cn.org.bjca.trust.java.imserver.entitys.DeviceEntity; +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; + +public class ConnectMessage extends PacketMessage { + public ConnectMessage() { + super(PacketType.CONNECT); + } + private DeviceEntity device; + + public ConnectMessage(DeviceEntity device) { + super(PacketType.CONNECT); + this.device = device; + } + + public DeviceEntity getDevice() { + return device; + } + + public void setDevice(DeviceEntity device) { + this.device = device; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectedMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectedMessage.java new file mode 100644 index 0000000..f883e52 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/ConnectedMessage.java @@ -0,0 +1,30 @@ +package cn.org.bjca.trust.java.imserver.im.msg; + + +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; + +public class ConnectedMessage extends PacketMessage { + public ConnectedMessage() { + super(PacketType.CONNECTED); + } + + private int status; + private String msg; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectMessage.java new file mode 100644 index 0000000..8008b74 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectMessage.java @@ -0,0 +1,26 @@ +package cn.org.bjca.trust.java.imserver.im.msg.msg; + + +import cn.org.bjca.trust.java.imserver.entitys.DeviceEntity; +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; + +public class ConnectMessage extends PacketMessage { + public ConnectMessage() { + super(PacketType.CONNECT); + } + private DeviceEntity device; + + public ConnectMessage(DeviceEntity device) { + super(PacketType.CONNECT); + this.device = device; + } + + public DeviceEntity getDevice() { + return device; + } + + public void setDevice(DeviceEntity device) { + this.device = device; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectedMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectedMessage.java new file mode 100644 index 0000000..0784e8a --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/ConnectedMessage.java @@ -0,0 +1,30 @@ +package cn.org.bjca.trust.java.imserver.im.msg.msg; + + +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; + +public class ConnectedMessage extends PacketMessage { + public ConnectedMessage() { + super(PacketType.CONNECTED); + } + + private int status; + private String msg; + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java new file mode 100644 index 0000000..c676b5d --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SZYXMessage.java @@ -0,0 +1,142 @@ +package cn.org.bjca.trust.java.imserver.im.msg.msg; + + +import cn.org.bjca.trust.java.imserver.entitys.UserInfo; +import cn.org.bjca.trust.java.imserver.enums.MsgType; +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; +import cn.org.bjca.trust.java.imserver.im.msg.msg.message.SZYXTextMessage; + +public class SZYXMessage extends PacketMessage { + public SZYXMessage(MsgType msgType) { + super(PacketType.SEND); + this.msgType = msgType; + } + + /** + * 发送者信息 + */ + private UserInfo fromClient; + /** + * 接收者信息 + */ + private String toClientId; + /** + * 群id + */ + private String groupID; + /** + * 自定义信息(备注信息,描述信息) + */ + private String describe; + /** + * 是不是群消息 + */ + private boolean isGroup; + /** + * 是不是接收消息 + */ + private boolean isArrive; + /** + * 消息发送状态 -1=失败;0=成功;1=发送中 + */ + private int status; + /** + * 消息类型 + */ + private MsgType msgType; + private SZYXTextMessage textMessage; + + public UserInfo getFromClient() { + return fromClient; + } + + public void setFromClient(UserInfo fromClient) { + this.fromClient = fromClient; + } + + public String getToClientId() { + return toClientId; + } + + public void setToClientId(String toClientId) { + this.toClientId = toClientId; + } + + public String getGroupID() { + return groupID; + } + + public void setGroupID(String groupID) { + this.groupID = groupID; + } + + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + + public boolean isGroup() { + return isGroup; + } + + public void setGroup(boolean group) { + isGroup = group; + } + + public boolean isArrive() { + return isArrive; + } + + public void setArrive(boolean arrive) { + isArrive = arrive; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public MsgType getMsgType() { + return msgType; + } + + public void setMsgType(MsgType msgType) { + this.msgType = msgType; + } + + public SZYXTextMessage getTextMessage() { + return textMessage; + } + + public void setTextMessage(SZYXTextMessage textMessage) { + this.textMessage = textMessage; + } + + public SZYXMessage copy(){ + SZYXMessage szyxMessage = new SZYXMessage(this.msgType); + szyxMessage.setMsgId(this.getMsgId()); + szyxMessage.setPacketType(this.getPacketType()); + szyxMessage.setTimestamp(this.getTimestamp()); + szyxMessage.setUserName(this.getUserName()); + szyxMessage.setAppId(this.getAppId()); + + szyxMessage.setArrive(this.isArrive()); + szyxMessage.setDescribe(this.getDescribe()); + szyxMessage.setMsgType(this.getMsgType()); + szyxMessage.setToClientId(this.getToClientId()); + szyxMessage.setFromClient(this.getFromClient()); + szyxMessage.setGroup(this.isGroup()); + szyxMessage.setStatus(this.getStatus()); + szyxMessage.setGroupID(this.getGroupID()); + return szyxMessage; + } + + +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SendAckMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SendAckMessage.java new file mode 100644 index 0000000..aae5a86 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/SendAckMessage.java @@ -0,0 +1,32 @@ +package cn.org.bjca.trust.java.imserver.im.msg.msg; + + +import cn.org.bjca.trust.java.imserver.enums.PacketType; +import cn.org.bjca.trust.java.imserver.im.bean.PacketMessage; + +public class SendAckMessage extends PacketMessage { + public SendAckMessage() { + super(PacketType.SEND_ACK); + } + private String ackId; + /** + * 0-成功;-1-失败; + */ + private int ackStatus; + + public String getAckId() { + return ackId; + } + + public void setAckId(String ackId) { + this.ackId = ackId; + } + + public int getAckStatus() { + return ackStatus; + } + + public void setAckStatus(int ackStatus) { + this.ackStatus = ackStatus; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java new file mode 100644 index 0000000..db79e16 --- /dev/null +++ b/src/main/java/cn/org/bjca/trust/java/imserver/im/msg/msg/message/SZYXTextMessage.java @@ -0,0 +1,17 @@ +package cn.org.bjca.trust.java.imserver.im.msg.msg.message; + +public class SZYXTextMessage { + private String text; + + public SZYXTextMessage(String text) { + this.text = text; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java b/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java index 21c65b3..029090e 100644 --- a/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java +++ b/src/main/java/cn/org/bjca/trust/java/imserver/repository/UserRepository.java @@ -2,11 +2,14 @@ package cn.org.bjca.trust.java.imserver.repository; import cn.org.bjca.trust.java.imserver.entitys.UserInfo; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { UserInfo findUserInfoByUserIdAndOsTypeAndAppId(String userId, String osType, String appId); + + List findAllByUserIdAndAppId(String userId, String appId); }