From c4531f27fa1846d889b984c661d76d00b1eba66e Mon Sep 17 00:00:00 2001
From: tangmingyou <234767776@qq.com>
Date: Sun, 27 Mar 2022 22:50:04 +0800
Subject: [PATCH] im struct
---
.gitignore | 57 ++++++
README.md | 44 +++++
im-client/pom.xml | 15 ++
.../net/sopod/soim/client/ClientMain.java | 11 ++
.../soim/client/server/ClientInitial.java | 13 ++
im-client/src/main/resources/setting.yml | 0
im-common/pom.xml | 15 ++
.../sopod/soim/common/cache/CacheNames.java | 14 ++
.../common/config/registry/EtcdRegistry.java | 13 ++
.../soim/common/config/registry/Registry.java | 13 ++
.../common/exception/ConvertException.java | 13 ++
im-common/src/main/resources/codes.properties | 0
.../resources/log4j2.component.properties | 1 +
im-common/src/main/resources/log4j2.xml | 97 ++++++++++
im-data/pom.xml | 26 +++
.../soim/data/constant/PlatformType.java | 25 +++
.../soim/data/constant/SerializeType.java | 28 +++
.../java/net/sopod/soim/data/net/Ping.java | 11 ++
.../java/net/sopod/soim/data/net/Pong.java | 10 +
.../sopod/soim/data/serialize/ImMessage.java | 159 ++++++++++++++++
im-entry/pom.xml | 51 ++++++
.../java/net/sopod/soim/entry/EntryMain.java | 27 +++
.../java/net/sopod/soim/entry/model/A.java | 16 ++
im-entry/src/main/resources/setting.yml | 0
im-logic-api/im-user-api/pom.xml | 16 ++
.../logic/api/user/service/UserService.java | 13 ++
im-logic-api/pom.xml | 15 ++
im-logic/im-logic-user/pom.xml | 15 ++
.../net/sopod/soim/logic/user/UserMain.java | 15 ++
.../src/main/resources/setting.yml | 0
im-logic/pom.xml | 19 ++
pom.xml | 173 ++++++++++++++++++
32 files changed, 925 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 im-client/pom.xml
create mode 100644 im-client/src/main/java/net/sopod/soim/client/ClientMain.java
create mode 100644 im-client/src/main/java/net/sopod/soim/client/server/ClientInitial.java
create mode 100644 im-client/src/main/resources/setting.yml
create mode 100644 im-common/pom.xml
create mode 100644 im-common/src/main/java/net/sopod/soim/common/cache/CacheNames.java
create mode 100644 im-common/src/main/java/net/sopod/soim/common/config/registry/EtcdRegistry.java
create mode 100644 im-common/src/main/java/net/sopod/soim/common/config/registry/Registry.java
create mode 100644 im-common/src/main/java/net/sopod/soim/common/exception/ConvertException.java
create mode 100644 im-common/src/main/resources/codes.properties
create mode 100644 im-common/src/main/resources/log4j2.component.properties
create mode 100644 im-common/src/main/resources/log4j2.xml
create mode 100644 im-data/pom.xml
create mode 100644 im-data/src/main/java/net/sopod/soim/data/constant/PlatformType.java
create mode 100644 im-data/src/main/java/net/sopod/soim/data/constant/SerializeType.java
create mode 100644 im-data/src/main/java/net/sopod/soim/data/net/Ping.java
create mode 100644 im-data/src/main/java/net/sopod/soim/data/net/Pong.java
create mode 100644 im-data/src/main/java/net/sopod/soim/data/serialize/ImMessage.java
create mode 100644 im-entry/pom.xml
create mode 100644 im-entry/src/main/java/net/sopod/soim/entry/EntryMain.java
create mode 100644 im-entry/src/main/java/net/sopod/soim/entry/model/A.java
create mode 100644 im-entry/src/main/resources/setting.yml
create mode 100644 im-logic-api/im-user-api/pom.xml
create mode 100644 im-logic-api/im-user-api/src/main/java/net/sopod/soim/logic/api/user/service/UserService.java
create mode 100644 im-logic-api/pom.xml
create mode 100644 im-logic/im-logic-user/pom.xml
create mode 100644 im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/UserMain.java
create mode 100644 im-logic/im-logic-user/src/main/resources/setting.yml
create mode 100644 im-logic/pom.xml
create mode 100644 pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..75090a7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,57 @@
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# IntelliJ IDEA project dir
+.idea/
+out/
+
+# Mac file attribute
+.DS_Store/
+.DS_Store
+
+# Package Files #
+# *.jar
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+*.zip
+/out
+*.iml
+*/target/
+.idea
+*/*.iml
+logs/
+*/logs/
+/${log4j.rootpath}logs
+target/
+*.bin
+*.log
+/logic/src/main/resources/servers.info
+
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+node_modules/
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# production
+/build
+
+# misc
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+/log
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..32116d0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+- 接入层 entry
+- 逻辑层 logic
+- 内存存储层 router
+- 固化存储层 das
+
+
+功能组件:
+1.0
+- IOC: guice
+- 通信层: netty
+- 序列化: protobuf
+- 内存存储:
+ - Caffeine
+ - Memcache
+- 分布式缓存:redis
+- 注册中心:etcd、直连
+- 处理队列:disruptor
+- 持久化:mysql
+- 日志:log4j2
+- 监控:prometheus、grafana
+
+- ID生成器
+
+2.0
+- quarkus
+
+
+集群负载均衡:
+子网1,子网2,公网
+子网1和2不相通
+
+
+entry <--> client 通信
+entry <--> logic dubbo service
+client jconsle cmd
+
+router <--> cache
+das <--> db
+router <--> das
+
+das shardingjdbc
+table struct, sharding roles
+logic biz
+
\ No newline at end of file
diff --git a/im-client/pom.xml b/im-client/pom.xml
new file mode 100644
index 0000000..c4b3077
--- /dev/null
+++ b/im-client/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-client
+
+
+
\ No newline at end of file
diff --git a/im-client/src/main/java/net/sopod/soim/client/ClientMain.java b/im-client/src/main/java/net/sopod/soim/client/ClientMain.java
new file mode 100644
index 0000000..c64286b
--- /dev/null
+++ b/im-client/src/main/java/net/sopod/soim/client/ClientMain.java
@@ -0,0 +1,11 @@
+package net.sopod.soim.client;
+
+/**
+ * Main
+ *
+ * @author tmy
+ * @date 2022-03-27 22:32
+ */
+public class ClientMain {
+
+}
diff --git a/im-client/src/main/java/net/sopod/soim/client/server/ClientInitial.java b/im-client/src/main/java/net/sopod/soim/client/server/ClientInitial.java
new file mode 100644
index 0000000..0425732
--- /dev/null
+++ b/im-client/src/main/java/net/sopod/soim/client/server/ClientInitial.java
@@ -0,0 +1,13 @@
+package net.sopod.soim.client.server;
+
+/**
+ * ClientInitial
+ *
+ * @author tmy
+ * @date 2022-03-27 22:36
+ */
+public class ClientInitial {
+
+
+
+}
diff --git a/im-client/src/main/resources/setting.yml b/im-client/src/main/resources/setting.yml
new file mode 100644
index 0000000..e69de29
diff --git a/im-common/pom.xml b/im-common/pom.xml
new file mode 100644
index 0000000..fe6825d
--- /dev/null
+++ b/im-common/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-common
+
+
+
\ No newline at end of file
diff --git a/im-common/src/main/java/net/sopod/soim/common/cache/CacheNames.java b/im-common/src/main/java/net/sopod/soim/common/cache/CacheNames.java
new file mode 100644
index 0000000..e4db72c
--- /dev/null
+++ b/im-common/src/main/java/net/sopod/soim/common/cache/CacheNames.java
@@ -0,0 +1,14 @@
+package net.sopod.soim.common.cache;
+
+/**
+ * CacheNames
+ *
+ * @author tmy
+ * @date 2022-03-26 00:15
+ */
+public interface CacheNames {
+
+ /** 验证码 */
+ String CAPTCHA_KEY = "soim:auth::soim:captcha:";
+
+}
diff --git a/im-common/src/main/java/net/sopod/soim/common/config/registry/EtcdRegistry.java b/im-common/src/main/java/net/sopod/soim/common/config/registry/EtcdRegistry.java
new file mode 100644
index 0000000..6e0c62d
--- /dev/null
+++ b/im-common/src/main/java/net/sopod/soim/common/config/registry/EtcdRegistry.java
@@ -0,0 +1,13 @@
+package net.sopod.soim.common.config.registry;
+
+/**
+ * EtcdRegistry
+ *
+ * @author tmy
+ * @date 2022-03-27 17:00
+ */
+public class EtcdRegistry {
+
+
+
+}
diff --git a/im-common/src/main/java/net/sopod/soim/common/config/registry/Registry.java b/im-common/src/main/java/net/sopod/soim/common/config/registry/Registry.java
new file mode 100644
index 0000000..d85770b
--- /dev/null
+++ b/im-common/src/main/java/net/sopod/soim/common/config/registry/Registry.java
@@ -0,0 +1,13 @@
+package net.sopod.soim.common.config.registry;
+
+/**
+ * Registry
+ *
+ * @author tmy
+ * @date 2022-03-27 17:00
+ */
+public class Registry {
+
+ private Registry registry;
+
+}
diff --git a/im-common/src/main/java/net/sopod/soim/common/exception/ConvertException.java b/im-common/src/main/java/net/sopod/soim/common/exception/ConvertException.java
new file mode 100644
index 0000000..7f0b9ea
--- /dev/null
+++ b/im-common/src/main/java/net/sopod/soim/common/exception/ConvertException.java
@@ -0,0 +1,13 @@
+package net.sopod.soim.common.exception;
+
+/**
+ * ConvertException
+ *
+ * @author tmy
+ * @date 2022-03-27 17:18
+ */
+public class ConvertException extends Exception {
+
+ private Throwable originException;
+
+}
diff --git a/im-common/src/main/resources/codes.properties b/im-common/src/main/resources/codes.properties
new file mode 100644
index 0000000..e69de29
diff --git a/im-common/src/main/resources/log4j2.component.properties b/im-common/src/main/resources/log4j2.component.properties
new file mode 100644
index 0000000..ed03a2b
--- /dev/null
+++ b/im-common/src/main/resources/log4j2.component.properties
@@ -0,0 +1 @@
+log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
\ No newline at end of file
diff --git a/im-common/src/main/resources/log4j2.xml b/im-common/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..cb708bd
--- /dev/null
+++ b/im-common/src/main/resources/log4j2.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %xwEx
+ %5p
+ yyyy-MM-dd HH:mm:ss.SSS
+ %clr{%d{${sys:LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${sys:LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
+ %d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} %pid --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -->
+
+
+
+
+
\ No newline at end of file
diff --git a/im-data/pom.xml b/im-data/pom.xml
new file mode 100644
index 0000000..c58ec6d
--- /dev/null
+++ b/im-data/pom.xml
@@ -0,0 +1,26 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-data
+
+
+
+ net.sopod
+ im-common
+ ${soim.version}
+
+
+ io.netty
+ netty-buffer
+
+
+
+
\ No newline at end of file
diff --git a/im-data/src/main/java/net/sopod/soim/data/constant/PlatformType.java b/im-data/src/main/java/net/sopod/soim/data/constant/PlatformType.java
new file mode 100644
index 0000000..99f8fca
--- /dev/null
+++ b/im-data/src/main/java/net/sopod/soim/data/constant/PlatformType.java
@@ -0,0 +1,25 @@
+package net.sopod.soim.data.constant;
+
+/**
+ * PlatformType
+ *
+ * @author tmy
+ * @date 2022-03-27 17:36
+ */
+public enum PlatformType {
+
+ IM_CLIENT,
+
+ IM_ENTRY,
+
+ IM_ROUTER,
+
+ IM_DAS,
+
+ IM_LOGIC,
+
+ IM_USER,
+
+ IM_GROUP;
+
+}
diff --git a/im-data/src/main/java/net/sopod/soim/data/constant/SerializeType.java b/im-data/src/main/java/net/sopod/soim/data/constant/SerializeType.java
new file mode 100644
index 0000000..ced722d
--- /dev/null
+++ b/im-data/src/main/java/net/sopod/soim/data/constant/SerializeType.java
@@ -0,0 +1,28 @@
+package net.sopod.soim.data.constant;
+
+/**
+ * SerializeType
+ *
+ * @author tmy
+ * @date 2022-03-27 17:14
+ */
+public enum SerializeType {
+
+ json,
+
+ protobuf;
+
+
+ public static interface Converter {
+
+ T deserialize(byte[] data, Class clazz) throws Exception;
+
+ byte[] serialize(Object pojo);
+
+ }
+
+ public static void main(String[] args) {
+
+ }
+
+}
diff --git a/im-data/src/main/java/net/sopod/soim/data/net/Ping.java b/im-data/src/main/java/net/sopod/soim/data/net/Ping.java
new file mode 100644
index 0000000..e44b85d
--- /dev/null
+++ b/im-data/src/main/java/net/sopod/soim/data/net/Ping.java
@@ -0,0 +1,11 @@
+package net.sopod.soim.data.net;
+
+/**
+ * Ping
+ *
+ * @author tmy
+ * @date 2022-03-26 01:04
+ */
+public class Ping {
+
+}
diff --git a/im-data/src/main/java/net/sopod/soim/data/net/Pong.java b/im-data/src/main/java/net/sopod/soim/data/net/Pong.java
new file mode 100644
index 0000000..c8a0f42
--- /dev/null
+++ b/im-data/src/main/java/net/sopod/soim/data/net/Pong.java
@@ -0,0 +1,10 @@
+package net.sopod.soim.data.net;
+
+/**
+ * Pomg
+ *
+ * @author tmy
+ * @date 2022-03-26 01:04
+ */
+public class Pong {
+}
diff --git a/im-data/src/main/java/net/sopod/soim/data/serialize/ImMessage.java b/im-data/src/main/java/net/sopod/soim/data/serialize/ImMessage.java
new file mode 100644
index 0000000..88162ee
--- /dev/null
+++ b/im-data/src/main/java/net/sopod/soim/data/serialize/ImMessage.java
@@ -0,0 +1,159 @@
+package net.sopod.soim.data.serialize;
+
+import io.netty.buffer.ByteBuf;
+
+import java.util.Random;
+
+/**
+ * Struct
+ * 是否是事件,是否需要返回值
+ *
+ * @author tmy
+ * @date 2022-03-27 17:13
+ */
+public class ImMessage {
+
+ public static final short MAGIC = 0x7a20;
+
+ public static final int MESSAGE_HEAD_LEN = 17;
+
+ public static final ImMessage PROTOCOL_ERROR;
+
+ public static final ImMessage MAGIC_ERROR;
+
+ static {
+ Random random = new Random();
+ PROTOCOL_ERROR = new ImMessage().setSerialNo(random.nextInt());
+ MAGIC_ERROR = new ImMessage().setSerialNo(random.nextInt());
+ }
+
+ /** 协议版本 */
+ //private int version;
+
+ /** 协议总长度 */
+ //private int protocolLength;
+
+ /** 请求序列号 */
+ private int serialNo;
+
+ /** 服务编号 */
+ private int serviceNo;
+
+ /** 请求体序列化格式 Ordinal */
+ private int serializeType;
+
+ /** 压缩算法 */
+ private int zipType;
+
+ /** 平台号 */
+ private int platformNo;
+
+ /** 请求体长度 */
+ private int bodyLength;
+
+ private byte[] body;
+
+ /**
+ * 从 bytebuf 流读取
+ */
+ public static ImMessage read(ByteBuf buf) {
+ int bufLen = buf.readableBytes();
+ if (bufLen < MESSAGE_HEAD_LEN) {
+ return PROTOCOL_ERROR;
+ }
+ short magic = buf.readShort();
+ if (magic != MAGIC) {
+ return MAGIC_ERROR;
+ }
+ ImMessage msg = new ImMessage()
+ .setSerialNo(buf.readInt())
+ .setServiceNo(buf.readInt())
+ .setSerializeType(buf.readByte())
+ .setZipType(buf.readByte())
+ .setPlatformNo(buf.readByte());
+ msg.bodyLength = buf.readInt();
+ if (bufLen != MESSAGE_HEAD_LEN + msg.getBodyLength()) {
+ return PROTOCOL_ERROR;
+ }
+ byte[] body = new byte[msg.getBodyLength()];
+ buf.readBytes(body);
+ msg.setBody(body);
+ return msg;
+ }
+
+ /**
+ * 写入到 bytebuf 流
+ */
+ public void write(ByteBuf buf) {
+ buf.writeShort(MAGIC)
+ .writeInt(this.serialNo)
+ .writeInt(this.serviceNo)
+ .writeByte(this.serializeType)
+ .writeByte(this.zipType)
+ .writeByte(this.platformNo);
+ if (this.body == null) {
+ buf.writeInt(0);
+ } else {
+ buf.writeInt(this.body.length)
+ .writeBytes(this.body);
+ }
+ }
+
+ public int getSerialNo() {
+ return serialNo;
+ }
+
+ public ImMessage setSerialNo(int serialNo) {
+ this.serialNo = serialNo;
+ return this;
+ }
+
+ public int getServiceNo() {
+ return serviceNo;
+ }
+
+ public ImMessage setServiceNo(int serviceNo) {
+ this.serviceNo = serviceNo;
+ return this;
+ }
+
+ public int getSerializeType() {
+ return serializeType;
+ }
+
+ public ImMessage setSerializeType(int serializeType) {
+ this.serializeType = serializeType;
+ return this;
+ }
+
+ public int getZipType() {
+ return zipType;
+ }
+
+ public ImMessage setZipType(int zipType) {
+ this.zipType = zipType;
+ return this;
+ }
+
+ public int getPlatformNo() {
+ return platformNo;
+ }
+
+ public ImMessage setPlatformNo(int platformNo) {
+ this.platformNo = platformNo;
+ return this;
+ }
+
+ public int getBodyLength() {
+ return bodyLength;
+ }
+
+ public byte[] getBody() {
+ return body;
+ }
+
+ public ImMessage setBody(byte[] body) {
+ this.body = body;
+ return this;
+ }
+}
diff --git a/im-entry/pom.xml b/im-entry/pom.xml
new file mode 100644
index 0000000..9232150
--- /dev/null
+++ b/im-entry/pom.xml
@@ -0,0 +1,51 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-entry
+
+
+ net.sopod.soim.entry.EntryMain
+
+
+
+
+ net.sopod
+ im-common
+ ${soim.version}
+
+
+ org.projectlombok
+ lombok
+
+
+ io.netty
+ netty-all
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+
+ ${mainClass}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/im-entry/src/main/java/net/sopod/soim/entry/EntryMain.java b/im-entry/src/main/java/net/sopod/soim/entry/EntryMain.java
new file mode 100644
index 0000000..e7b032e
--- /dev/null
+++ b/im-entry/src/main/java/net/sopod/soim/entry/EntryMain.java
@@ -0,0 +1,27 @@
+package net.sopod.soim.entry;
+
+import net.sopod.soim.entry.model.A;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * EntryMain
+ *
+ * @author tmy
+ * @date 2022-03-26 00:06
+ */
+public class EntryMain {
+
+ private static final Logger logger = LoggerFactory.getLogger(EntryMain.class);
+
+ public static void main(String[] args) {
+ logger.info("info");
+ logger.warn("warn");
+ logger.error("error...");
+
+ A a = new A();
+ a.setName("太极拳");
+ System.out.println(a);
+ }
+
+}
diff --git a/im-entry/src/main/java/net/sopod/soim/entry/model/A.java b/im-entry/src/main/java/net/sopod/soim/entry/model/A.java
new file mode 100644
index 0000000..1b58dc3
--- /dev/null
+++ b/im-entry/src/main/java/net/sopod/soim/entry/model/A.java
@@ -0,0 +1,16 @@
+package net.sopod.soim.entry.model;
+
+import lombok.Data;
+
+/**
+ * A
+ *
+ * @author tmy
+ * @date 2022-03-27 17:01
+ */
+@Data
+public class A {
+
+ private String name;
+
+}
diff --git a/im-entry/src/main/resources/setting.yml b/im-entry/src/main/resources/setting.yml
new file mode 100644
index 0000000..e69de29
diff --git a/im-logic-api/im-user-api/pom.xml b/im-logic-api/im-user-api/pom.xml
new file mode 100644
index 0000000..6d636de
--- /dev/null
+++ b/im-logic-api/im-user-api/pom.xml
@@ -0,0 +1,16 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+ ../../pom.xml
+
+ 4.0.0
+
+ im-user-api
+
+
+
\ No newline at end of file
diff --git a/im-logic-api/im-user-api/src/main/java/net/sopod/soim/logic/api/user/service/UserService.java b/im-logic-api/im-user-api/src/main/java/net/sopod/soim/logic/api/user/service/UserService.java
new file mode 100644
index 0000000..aef742f
--- /dev/null
+++ b/im-logic-api/im-user-api/src/main/java/net/sopod/soim/logic/api/user/service/UserService.java
@@ -0,0 +1,13 @@
+package net.sopod.soim.logic.api.user.service;
+
+/**
+ * UserService
+ *
+ * @author tmy
+ * @date 2022-03-27 22:42
+ */
+public interface UserService {
+
+
+
+}
diff --git a/im-logic-api/pom.xml b/im-logic-api/pom.xml
new file mode 100644
index 0000000..aaec1f6
--- /dev/null
+++ b/im-logic-api/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-logic-api
+
+
+
\ No newline at end of file
diff --git a/im-logic/im-logic-user/pom.xml b/im-logic/im-logic-user/pom.xml
new file mode 100644
index 0000000..cc9a36a
--- /dev/null
+++ b/im-logic/im-logic-user/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ im-logic
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-logic-user
+
+
+
\ No newline at end of file
diff --git a/im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/UserMain.java b/im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/UserMain.java
new file mode 100644
index 0000000..8643dde
--- /dev/null
+++ b/im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/UserMain.java
@@ -0,0 +1,15 @@
+package net.sopod.soim.logic.user;
+
+/**
+ * UserMain
+ *
+ * @author tmy
+ * @date 2022-03-26 01:41
+ */
+public class UserMain {
+
+ public static void main(String[] args) {
+
+ }
+
+}
diff --git a/im-logic/im-logic-user/src/main/resources/setting.yml b/im-logic/im-logic-user/src/main/resources/setting.yml
new file mode 100644
index 0000000..e69de29
diff --git a/im-logic/pom.xml b/im-logic/pom.xml
new file mode 100644
index 0000000..33c7732
--- /dev/null
+++ b/im-logic/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ so-im
+ net.sopod
+ 1.0.0
+
+ 4.0.0
+
+ im-logic
+ pom
+
+ im-logic-user
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..fb3062b
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,173 @@
+
+
+ 4.0.0
+
+ net.sopod
+ so-im
+ pom
+ 1.0.0
+
+ im-common
+ im-data
+ im-entry
+ im-logic
+ im-client
+ im-logic-api
+ im-logic-api/im-user-api
+
+
+
+ UTF-8
+ UTF-8
+ UTF-8
+ 11
+ 11
+ 11
+ 2.12.5
+ 1.2.11
+ 2.17.2
+ 1.0.0
+ 4.1.72.Final
+
+
+
+
+
+ io.netty
+ netty-all
+ ${netty.version}
+
+
+ io.netty
+ netty-buffer
+ ${netty.version}
+
+
+ com.google.protobuf
+ protobuf-java
+ 3.15.8
+
+
+ com.lmax
+ disruptor
+ 3.4.4
+
+
+ org.reflections
+ reflections
+ 0.9.12
+
+
+ com.google.inject
+ guice
+ 4.1.0
+
+
+ com.google.guava
+ guava
+ 20.0
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.33
+
+
+ com.zaxxer
+ HikariCP
+ 3.4.5
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.36
+
+
+ org.apache.logging.log4j
+ log4j-api
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
+
+
+ org.projectlombok
+ lombok
+ 1.18.22
+ provided
+
+
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.apache.logging.log4j
+ log4j-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+
+
+ com.lmax
+ disruptor
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+ ${project.build.finalName}
+
+
+
+
+
+ jar-with-dependencies
+
+ false
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
+
\ No newline at end of file