* 本方法中用户验证通过(即方法返回值=0时)后 ,将立即调用回调方法
* {@link ServerEventListener#onUserLoginAction_CallBack(String, String, Channel)}
* 否则会将验证结果(本方法返回值错误码通过客户端的
* ChatBaseEvent.onLoginMessage(int dwUserId, int dwErrorCode) 方法进行回调)通知客户端)。*/
byte onVerifyUser_CallBack(String userId, String token, String extra, Channel session);
/**用户登录验证成功后的回调方法定义(可理解为上线通知回调).
* 服务端的应用层通常可在本方法中实现用户上线通知等。
* note:本回调在一种特殊情况下——即用户实际未退出登陆但再次发起来登陆包时,回调也是一定会被调用。*/
void onUserLoginAction_CallBack(String userId, String extra, Channel session);
/**用户退出登录回调方法定义(可理解为下线通知回调)。
* 服务端的应用层通常可在本方法中实现用户下线通知等。*/
void onUserLogoutAction_CallBack(String userId, Object obj, Channel session);
/**消息发送之前,前置操作
* 本方法的典型用途:消息落地,适用于所有消息场景,在消息发送逻辑正式执行前执行*/
void messageBefore_CallBack(Agreement dataFromClient);
/**收到客户端发送给“其它客户端”的数据回调通知(即:消息路径为“C2C”的消息).
* note:本方法当且仅当在数据被服务端成功实时发送(“实时”即意味着对方在线的情况下)出去后被回调调用.
* 本方法的典型用途:开发者可在本方法中可以实现用户聊天信息的收集,以便后期监控分析用户的行为等。*/
void messageSendSuccess_C2C_CallBack(Agreement dataFromClient);
/**服务端在进行消息直发(S2C消息)或转发(C2C消息)时,当对方在线但实时发送失败、以及其它各种问题导 致消息并没能正常发出时,
* 将无条件走本回调通知。
* note:本方法当且仅当在数据被服务端在线发送失败后被回调调用.*/
boolean messageSendFaild_C2C_CallBack(Agreement dataFromClient);
/**用户发送群组信息时,通过此回调接口返回群组中除自己以外,所有在线用户的id列表
* note:注意此接口最好只返回在线列表(最佳实践:可以通过位图结构,实时更新在线群组人员)*/
List
.
├── BaseServerApplication: 基础启动类, 项目中的启动类需基于此类启动.
│
├── argeement
│ ├── Agreement: 请求相应消息包装, 客户端与服务端之间消息应遵循该格式, 详细信息可参考 WebSocket_Agreement.md.
│ ├── AgreementFactory: Agreement 转换工厂, 基于 FastJSON, 主要用于处理: (客户端消息 <-> Agreement <-> 服务端消息) 之间的转换.
│ ├── AgreementType: Agreement.type 属性枚举.
│ ├── server: 服务端向客户端通用响应封装, 对应序列化为响应时的 Agreement.dataContent.
│ │ ├── ErrorResponse: 通用错误响应.
│ │ ├── GroupResponse: 群聊信息响应(暂未使用).
│ │ └── LoginResponse: 登陆结果响应.
│ ├── ErrorCode: ErrorResponse.errorCode 属性枚举.
│ └── client: 客户端向服务器通用请求封装, 对应请求时的 Agreement.dataContent 的反序列化.
│ └── LoginInfo: 用户登陆请求.
│
├── container: 容器对象, 目前仅存放了在线用户 Channel 容器.
│ ├── OnlineMap: 在线用户缓存容器接口.
│ ├── CaffeineCache: 基于 Caffeine 的在线用户缓存实现, 包括 Spring 5, 以及 SpringBoot 2 目前都使用它代替了 Guava 用做缓存.
│ └── DefaultOnlineMap: 基于 ConcurrentHashMap 的在线用户缓存实现.
│
├── event: 监听以及监听事件相关.
│ ├── MessageQoSEventListenerS2C: QoS 监听器.
│ └── ServerEventListener: 业务相关监听器, 上文也有详细介绍.
│
├── handler: 客户端消息处理器, 客户端消息经过 Netty 后的基础业务处理相关.
│ ├── AbstractServerHandler: Handler 模板抽象类
│ ├── ApplicationPullHandler: 暂未使用, 保留
│ ├── ApplicationPushHandler: 暂未使用, 保留
│ ├── ServerCoreHandler: 暂未使用, 保留
│ ├── ServerWebSocketCoreHandler: Handler 抽象类的一个 WebSocket 实现, 客户端请求会首先分发至此 Handler
│ ├── disruptor: 请求经由 Handler 处理后, 会提交至我们基于 Disruptor 实现的连接池, Disruptor 是一个高吞吐量的环状队列.
│ │ ├── EventProducer: Disruptor 连接池.
│ │ └── event: Disruptor 连接池任务.
│ │ └── WebSocketEvent: Disruptor 连接池任务所需参数包装.
│ │
│ ├── qos: QoS 相关, 保证服务端与客户端之间, 消息的可靠传输, 暂时不细讲.
│ │ ├── QoS4RecivedDaemonC2S
│ │ ├── QoS4RecivedDaemonRoot
│ │ ├── QoS4SendDaemonRoot
│ │ └── QoS4SendDaemonS2C
│ │
│ └── strategy: 客户端消息经 Handler 提交至 EventProducer 后, 大致会根据 Agreement.type 分发至相对应应的, 此包下的业务能力处理器上.
│ ├── AgreementCLoginHandler: 弃用中, 保留
│ ├── AgreementStrategy: 业务能力处理器接口
│ └── websocket: 基于 WebSocket 通信业务能力处理器相关
│ ├── AgreementWebSocketCKeepLiveHandler: 心跳续约处理器, 响应客户端的心跳续约请求.
│ ├── AgreementWebSocketCCommonPullHandler: 客户端发起的, 点对多消息, 通用处理器.
│ ├── AgreementWebSocketCCommonPushHandler: 客户端发起的, 点对点消息, 通用处理器.
│ ├── AgreementWebSocketCLoginHandler: 客户端登陆消息处理器.
│ ├── AgreementWebSocketCLogoutHandler: 客户端退出登陆消息处理器.
│ └── AgreementWebSocketCRecivedHandler: 客户端收到消息后, 返回的确认已收到 ACK 消息处理器.
│
├── netty
│ ├── IMObserver: Netty 异步操作发生时, 可利用此接口, 基于异步处理的结果实现相应业务.
│ ├── channel: 暂时仅存放 UDP 相关的 Channel 包装.
│ │ ├── UDPClientChannel
│ │ └── UDPServerChannel
│ ├── config
│ │ └── UDPServerChannelConfig
│ └── handler
│ ├── NioWebSocketHandler: Netty 这边的消息处理器, 仅仅用于传递消息至 Handler.
│ └── UDPClientInboundHandler
│
├── processor: 基础能力层顶层静态工具类.
│ ├── CommonProcessor: 消息处理器, 底层调用 GlobalHelper, LocalHelper 发送消息, 以及 QoS 相关的静态方法包装.
│ └── OnlineProcessor: 操作在线用户相关处理器, 包括在线用户容器也在其中.
│
└── utils: 基础能力层底层工具类
├── BasicThreadFactory: 线程工厂工具类.
├── ByteBufJsonConvert: ByteBuf 与 JSON 转换工具类.
├── CharsetHelper:
├── GlobalSendHelper: C2C/G(客户端 -> 客户端/服务端) 消息发送工具类.
├── LocalSendHelper: S2C(服务端 -> 客户端) 消息发送工具类.
├── MQProvider: RabbitMQ 相关工具, 暂未使用
├── RedisProvider: Redis 相关工具类.
├── SequenceIdutil: 消息标识生成器工具.
├── SequenceIdUtil2: 消息标识生成工具.
└── SystemClock: 获取当前时间工具类, 建议使用其获取当前时间.