* 本方法中用户验证通过(即方法返回值=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: 获取当前时间工具类, 建议使用其获取当前时间.