Full Code of wildfirechat/im-server for AI

wildfirechat 3eef24bdb9bf cached
775 files
4.9 MB
1.3M tokens
12063 symbols
1 requests
Download .txt
Showing preview only (5,361K chars total). Download the full file or copy to clipboard to get everything.
Repository: wildfirechat/im-server
Branch: wildfirechat
Commit: 3eef24bdb9bf
Files: 775
Total size: 4.9 MB

Directory structure:
gitextract_689bbic2/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── LICENSE_996
├── LICENSE_mqtt-jmeter
├── README.md
├── broker/
│   ├── config/
│   │   ├── hazelcast.xml
│   │   └── wildfirechat.conf
│   ├── migrate/
│   │   ├── h2/
│   │   │   ├── V10__create_default_admin.sql
│   │   │   ├── V11__alter_device_token.sql
│   │   │   ├── V12__add_group_control_columns.sql
│   │   │   ├── V13__create_settings_table.sql
│   │   │   ├── V14__add_id_for_sensitive_word.sql
│   │   │   ├── V15__alter_voip_token_length.sql
│   │   │   ├── V16__add_friend_blocked.sql
│   │   │   ├── V17__add_user_session_token_index.sql
│   │   │   ├── V18__add_friend_request_index.sql
│   │   │   ├── V19__add_user_session_uid_index.sql
│   │   │   ├── V1__baseline.sql
│   │   │   ├── V20__user_session_add_deleted.sql
│   │   │   ├── V21__user_add_deleted.sql
│   │   │   ├── V22__refactor_channel_status.sql
│   │   │   ├── V23__alter_message_add_to_column.sql
│   │   │   ├── V24__add_friend_extra.sql
│   │   │   ├── V25__create_chatroom_blacklist_manager.sql
│   │   │   ├── V26__add_user_messages_line.sql
│   │   │   ├── V27__create_device_table.sql
│   │   │   ├── V28__add_session_user_type.sql
│   │   │   ├── V29__create_receipt_table.sql
│   │   │   ├── V2__create_table.sql
│   │   │   ├── V30__add_group_member_create_dt.sql
│   │   │   ├── V31__add_group_member_count_history_message.sql
│   │   │   ├── V32__alter_setting_column_name.sql
│   │   │   ├── V33__alter_group_searchable_column.sql
│   │   │   ├── V34__create_files_table.sql
│   │   │   ├── V35__create_file_transfer_user.sql
│   │   │   ├── V36__alter_channel_status_column.sql
│   │   │   ├── V37__add_user_messages_mid_index.sql
│   │   │   ├── V38__add_user_messages_conv_info.sql
│   │   │   ├── V39__add_group_member_friend_request_extra.sql
│   │   │   ├── V3__create_sharding_table.sql
│   │   │   ├── V40__add_user_messages_cont_type.sql
│   │   │   ├── V41__alter_user_setting_key_column.sql
│   │   │   ├── V42__create_secret_chat_table.sql
│   │   │   ├── V43__add_message_table_conversation_index.sql
│   │   │   ├── V44__add_channel_listener_table_member_index.sql
│   │   │   ├── V45__add_channel_menu_column.sql
│   │   │   ├── V46__add_group_member_mid_index.sql
│   │   │   ├── V47__create_super_group.sql
│   │   │   ├── V48__group_add_deleted_column.sql
│   │   │   ├── V49__add_domain_table.sql
│   │   │   ├── V4__create_default_chatroom.sql
│   │   │   ├── V50__update_group_member_index.sql
│   │   │   ├── V51__add_not_allow_name_setting.sql
│   │   │   ├── V52__modify_message_target.sql
│   │   │   ├── V53__session_add_ip_column.sql
│   │   │   ├── V54__add_group_member_index.sql
│   │   │   ├── V55__create_conference_table.sql
│   │   │   ├── V56__create_join_group_request_table.sql
│   │   │   ├── V57__create_friend_index.sql
│   │   │   ├── V5__create_default_robot.sql
│   │   │   ├── V6__add_friend_alias.sql
│   │   │   ├── V7__add_createtime_user_group_table.sql
│   │   │   ├── V8__add_content_type_in_messages.sql
│   │   │   └── V9__add_sensitive_messages.sql
│   │   ├── mysql/
│   │   │   ├── V10__create_default_admin.sql
│   │   │   ├── V11__alter_device_token.sql
│   │   │   ├── V12__add_group_control_columns.sql
│   │   │   ├── V13__create_session_table.sql
│   │   │   ├── V14__alter_createtime_user_group_table.sql
│   │   │   ├── V15__alter_session_table_time.sql
│   │   │   ├── V16__update_message_dt_gmt8.sql
│   │   │   ├── V17__add_default_sensitive_word.sql
│   │   │   ├── V18__create_settings_table.sql
│   │   │   ├── V19__add_id_for_sensitive_word.sql
│   │   │   ├── V1__baseline.sql
│   │   │   ├── V20__alter_voip_token_length.sql
│   │   │   ├── V21__add_friend_blocked.sql
│   │   │   ├── V22__add_user_session_token_index.sql
│   │   │   ├── V23__add_friend_request_index.sql
│   │   │   ├── V24__add_user_session_uid_index.sql
│   │   │   ├── V25__user_session_add_deleted.sql
│   │   │   ├── V26__user_add_deleted.sql
│   │   │   ├── V27__refactor_channel_status.sql
│   │   │   ├── V28__alter_message_add_to_column.sql
│   │   │   ├── V29__add_friend_extra.sql
│   │   │   ├── V2__create_table.sql
│   │   │   ├── V30__create_chatroom_blacklist_manager.sql
│   │   │   ├── V31__add_user_messages_line.sql
│   │   │   ├── V32__create_device_table.sql
│   │   │   ├── V33__add_session_user_type.sql
│   │   │   ├── V34__create_receipt_table.sql
│   │   │   ├── V35__add_group_member_create_dt.sql
│   │   │   ├── V36__add_group_member_count_history_message.sql
│   │   │   ├── V37__alter_setting_column_name.sql
│   │   │   ├── V38__alter_group_searchable_column.sql
│   │   │   ├── V39__create_files_table.sql
│   │   │   ├── V3__create_sharding_table.sql
│   │   │   ├── V40__create_file_transfer_user.sql
│   │   │   ├── V41__alter_channel_status_column.sql
│   │   │   ├── V42__add_user_messages_mid_index.sql
│   │   │   ├── V43__add_user_messages_conv_info.sql
│   │   │   ├── V44__add_group_member_friend_request_extra.sql
│   │   │   ├── V45__add_user_messages_cont_type.sql
│   │   │   ├── V46__utf8mb4_unicode_ci_to_utf8mb4_bin.sql
│   │   │   ├── V47__fix_read_report_error.sql
│   │   │   ├── V48__alter_user_setting_key_column.sql
│   │   │   ├── V49__create_secret_chat_table.sql
│   │   │   ├── V4__create_default_chatroom.sql
│   │   │   ├── V50__add_message_table_conversation_index.sql
│   │   │   ├── V51__add_channel_listener_table_member_index.sql
│   │   │   ├── V52__add_channel_menu_column.sql
│   │   │   ├── V53__add_group_member_mid_index.sql
│   │   │   ├── V54__create_super_group.sql
│   │   │   ├── V55__group_add_deleted_column.sql
│   │   │   ├── V56__add_domain_table.sql
│   │   │   ├── V57__update_group_member_index.sql
│   │   │   ├── V58__reupdate_group_member_index.sql
│   │   │   ├── V59__add_no_allow_name_setting.sql
│   │   │   ├── V5__create_default_robot.sql
│   │   │   ├── V60__modify_messages_target.sql
│   │   │   ├── V61__session_add_ip_column.sql
│   │   │   ├── V64__add_group_member_index.sql
│   │   │   ├── V65__create_conference_table.sql
│   │   │   ├── V66__create_join_group_request_table.sql
│   │   │   ├── V67__create_friend_index.sql
│   │   │   ├── V6__add_friend_alias.sql
│   │   │   ├── V7__add_createtime_user_group_table.sql
│   │   │   ├── V8__add_content_type_in_messages.sql
│   │   │   └── V9__add_sensitive_messages.sql
│   │   └── 重要!!!必看!!!.txt
│   ├── nginx/
│   │   └── imserver.conf
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   ├── cn/
│           │   │   └── wildfirechat/
│           │   │       ├── push/
│           │   │       │   ├── PushMessage.java
│           │   │       │   └── PushServer.java
│           │   │       └── server/
│           │   │           ├── Server.java
│           │   │           └── ThreadPoolExecutorWrapper.java
│           │   ├── com/
│           │   │   └── xiaoleilu/
│           │   │       └── loServer/
│           │   │           ├── LoFileServer.java
│           │   │           ├── LoServer.java
│           │   │           ├── RestResult.java
│           │   │           ├── ServerSetting.java
│           │   │           ├── action/
│           │   │           │   ├── Action.java
│           │   │           │   ├── CheckTokenAction.java
│           │   │           │   ├── ClassUtil.java
│           │   │           │   ├── DefaultIndexAction.java
│           │   │           │   ├── FileAction.java
│           │   │           │   ├── IMAction.java
│           │   │           │   ├── NotFoundAction.java
│           │   │           │   ├── RouteAction.java
│           │   │           │   ├── UnknownErrorAction.java
│           │   │           │   ├── UploadFileAction.java
│           │   │           │   ├── VersionAction.java
│           │   │           │   ├── admin/
│           │   │           │   │   ├── AddFriendRequestAction.java
│           │   │           │   │   ├── AddGroupMemberAction.java
│           │   │           │   │   ├── AdminAction.java
│           │   │           │   │   ├── AliasGetAction.java
│           │   │           │   │   ├── AliasPutAction.java
│           │   │           │   │   ├── ApplicationGetUserInfoAction.java
│           │   │           │   │   ├── BlacklistAction.java
│           │   │           │   │   ├── BlacklistGetAction.java
│           │   │           │   │   ├── BlockUserAction.java
│           │   │           │   │   ├── BroadcastMessageAction.java
│           │   │           │   │   ├── ChannelSubscriberAction.java
│           │   │           │   │   ├── CheckUserOnlineAction.java
│           │   │           │   │   ├── CheckUserSubscribeChannelAction.java
│           │   │           │   │   ├── CreateChannelAction.java
│           │   │           │   │   ├── CreateChatroomAction.java
│           │   │           │   │   ├── CreateGroupAction.java
│           │   │           │   │   ├── CreateRobotAction.java
│           │   │           │   │   ├── CreateUserAction.java
│           │   │           │   │   ├── DestoryChatroomAction.java
│           │   │           │   │   ├── DestroyChannelAction.java
│           │   │           │   │   ├── DestroyUserAction.java
│           │   │           │   │   ├── DismissGroupAction.java
│           │   │           │   │   ├── FriendExtraPutAction.java
│           │   │           │   │   ├── FriendRelationAction.java
│           │   │           │   │   ├── FriendRelationGetAction.java
│           │   │           │   │   ├── GetAllUserAction.java
│           │   │           │   │   ├── GetBatchUserAction.java
│           │   │           │   │   ├── GetChannelAction.java
│           │   │           │   │   ├── GetChatroomInfoAction.java
│           │   │           │   │   ├── GetChatroomMembersAction.java
│           │   │           │   │   ├── GetCommonGroupsAction.java
│           │   │           │   │   ├── GetGroupInfoAction.java
│           │   │           │   │   ├── GetGroupMemberAction.java
│           │   │           │   │   ├── GetGroupMembersAction.java
│           │   │           │   │   ├── GetIMTokenAction.java
│           │   │           │   │   ├── GetMessageAction.java
│           │   │           │   │   ├── GetOnlineUserAction.java
│           │   │           │   │   ├── GetRobotAction.java
│           │   │           │   │   ├── GetSystemSettingAction.java
│           │   │           │   │   ├── GetUploadUrlAction.java
│           │   │           │   │   ├── GetUserAction.java
│           │   │           │   │   ├── GetUserBlockListAction.java
│           │   │           │   │   ├── GetUserBlockStatusAction.java
│           │   │           │   │   ├── GetUserChatroomAction.java
│           │   │           │   │   ├── GetUserGroupsAction.java
│           │   │           │   │   ├── GetUserGroupsByTypeAction.java
│           │   │           │   │   ├── GetUserOnlineCountAction.java
│           │   │           │   │   ├── GetUserRobotsAction.java
│           │   │           │   │   ├── GetUserSessionsAction.java
│           │   │           │   │   ├── GetUsersByEmailAction.java
│           │   │           │   │   ├── HealthAction.java
│           │   │           │   │   ├── KickoffGroupMemberAction.java
│           │   │           │   │   ├── KickoffUserClientAction.java
│           │   │           │   │   ├── ModifyGroupInfoAction.java
│           │   │           │   │   ├── ModifyGroupMemberAliasAction.java
│           │   │           │   │   ├── ModifyGroupMemberExtraAction.java
│           │   │           │   │   ├── MulticastMessageAction.java
│           │   │           │   │   ├── PutSystemSettingAction.java
│           │   │           │   │   ├── QuitGroupMemberAction.java
│           │   │           │   │   ├── RecallMessageAction.java
│           │   │           │   │   ├── RecallMultiCastMessageAction.java
│           │   │           │   │   ├── RelationGetAction.java
│           │   │           │   │   ├── SendMessageAction.java
│           │   │           │   │   ├── SensitiveWordAddAction.java
│           │   │           │   │   ├── SensitiveWordDeleteAction.java
│           │   │           │   │   ├── SensitiveWordQueryAction.java
│           │   │           │   │   ├── SetGroupManagerAction.java
│           │   │           │   │   ├── TransferGroupAction.java
│           │   │           │   │   └── UpdateUserAction.java
│           │   │           │   ├── channel/
│           │   │           │   │   ├── ApplicationGetUserInfoAction.java
│           │   │           │   │   ├── ChannelAction.java
│           │   │           │   │   ├── GetChannelAction.java
│           │   │           │   │   ├── GetChannelSubscribersAction.java
│           │   │           │   │   ├── GetIsChannelSubscriberAction.java
│           │   │           │   │   ├── GetUserAction.java
│           │   │           │   │   ├── ModifyChannelProfileAction.java
│           │   │           │   │   ├── SendMessageAction.java
│           │   │           │   │   └── SubscriberChannelAction.java
│           │   │           │   └── robot/
│           │   │           │       ├── AddGroupMemberAction.java
│           │   │           │       ├── ApplicationGetUserInfoAction.java
│           │   │           │       ├── CreateGroupAction.java
│           │   │           │       ├── DeleteCallbackAction.java
│           │   │           │       ├── DismissGroupAction.java
│           │   │           │       ├── GetCallbackAction.java
│           │   │           │       ├── GetGroupInfoAction.java
│           │   │           │       ├── GetGroupMemberAction.java
│           │   │           │       ├── GetGroupMembersAction.java
│           │   │           │       ├── GetProfileAction.java
│           │   │           │       ├── GetUploadUrlAction.java
│           │   │           │       ├── GetUserAction.java
│           │   │           │       ├── KickoffGroupMemberAction.java
│           │   │           │       ├── ModifyGroupInfoAction.java
│           │   │           │       ├── ModifyGroupMemberAliasAction.java
│           │   │           │       ├── ModifyGroupMemberExtraAction.java
│           │   │           │       ├── QuitGroupMemberAction.java
│           │   │           │       ├── ReplyMessageAction.java
│           │   │           │       ├── RobotAction.java
│           │   │           │       ├── SendMessageAction.java
│           │   │           │       ├── SetCallbackAction.java
│           │   │           │       ├── TransferGroupAction.java
│           │   │           │       └── UpdateProfileAction.java
│           │   │           ├── annotation/
│           │   │           │   ├── HttpMethod.java
│           │   │           │   ├── RequireAuthentication.java
│           │   │           │   └── Route.java
│           │   │           ├── exception/
│           │   │           │   └── ServerSettingException.java
│           │   │           ├── filter/
│           │   │           │   └── Filter.java
│           │   │           ├── handler/
│           │   │           │   ├── ActionHandler.java
│           │   │           │   ├── AdminActionHandler.java
│           │   │           │   ├── HttpChunkContentCompressor.java
│           │   │           │   ├── HttpFileServerController.java
│           │   │           │   ├── HttpFileServerHandler.java
│           │   │           │   ├── HttpResponseHelper.java
│           │   │           │   ├── IMActionHandler.java
│           │   │           │   ├── Request.java
│           │   │           │   └── Response.java
│           │   │           ├── listener/
│           │   │           │   └── FileProgressiveFutureListener.java
│           │   │           └── model/
│           │   │               └── FriendData.java
│           │   ├── io/
│           │   │   ├── moquette/
│           │   │   │   ├── BrokerConstants.java
│           │   │   │   ├── connections/
│           │   │   │   │   ├── IConnectionsManager.java
│           │   │   │   │   ├── MqttConnectionMetrics.java
│           │   │   │   │   └── MqttSession.java
│           │   │   │   ├── imhandler/
│           │   │   │   │   ├── AddFriendHandler.java
│           │   │   │   │   ├── AddGroupMember.java
│           │   │   │   │   ├── BlackListRequestHandler.java
│           │   │   │   │   ├── BroadcastMessageHandler.java
│           │   │   │   │   ├── ChannelListenMember.java
│           │   │   │   │   ├── ChannelListenedListHandler.java
│           │   │   │   │   ├── ChannelSearchHandler.java
│           │   │   │   │   ├── ConfigApplicationHandler.java
│           │   │   │   │   ├── CreateChannelHandler.java
│           │   │   │   │   ├── CreateGroupHandler.java
│           │   │   │   │   ├── DeleteFriendHandler.java
│           │   │   │   │   ├── DestroyChannelHandler.java
│           │   │   │   │   ├── DestroyUserHandler.java
│           │   │   │   │   ├── DisconnectHandler.java
│           │   │   │   │   ├── DismissGroupHandler.java
│           │   │   │   │   ├── FriendPullHandler.java
│           │   │   │   │   ├── FriendRequestPullHandler.java
│           │   │   │   │   ├── GetApplicationTokenHandler.java
│           │   │   │   │   ├── GetChannelInfoHandler.java
│           │   │   │   │   ├── GetChatroomInfoHandler.java
│           │   │   │   │   ├── GetChatroomMemberHandler.java
│           │   │   │   │   ├── GetCommonGroupsHandler.java
│           │   │   │   │   ├── GetGroupInfoHandler.java
│           │   │   │   │   ├── GetGroupMemberHandler.java
│           │   │   │   │   ├── GetMediaUploadTokenHandler.java
│           │   │   │   │   ├── GetMyGroupsHandler.java
│           │   │   │   │   ├── GetQiniuUploadTokenHandler.java
│           │   │   │   │   ├── GetTokenHandler.java
│           │   │   │   │   ├── GetUserInfoHandler.java
│           │   │   │   │   ├── GetUserSettingHandler.java
│           │   │   │   │   ├── GroupHandler.java
│           │   │   │   │   ├── HandleFriendRequestHandler.java
│           │   │   │   │   ├── Handler.java
│           │   │   │   │   ├── IMHandler.java
│           │   │   │   │   ├── JoinChatroomHandler.java
│           │   │   │   │   ├── KickoffGroupMember.java
│           │   │   │   │   ├── KickoffPCClientHandler.java
│           │   │   │   │   ├── LoadRemoteMessagesHandler.java
│           │   │   │   │   ├── ModifyChannelInfoHandler.java
│           │   │   │   │   ├── ModifyGroupAliasHandler.java
│           │   │   │   │   ├── ModifyGroupInfoHandler.java
│           │   │   │   │   ├── ModifyGroupMemberAliasHandler.java
│           │   │   │   │   ├── ModifyGroupMemberExtraHandler.java
│           │   │   │   │   ├── ModifyMyInfoHandler.java
│           │   │   │   │   ├── MultiCastMessageHandler.java
│           │   │   │   │   ├── PullMessageHandler.java
│           │   │   │   │   ├── PutUserSettingHandler.java
│           │   │   │   │   ├── QuitChatroomHandler.java
│           │   │   │   │   ├── QuitGroupHandler.java
│           │   │   │   │   ├── RecallMessageHandler.java
│           │   │   │   │   ├── RecallMultiCastMessageHandler.java
│           │   │   │   │   ├── ReplyMessageHandler.java
│           │   │   │   │   ├── RouteHandler.java
│           │   │   │   │   ├── SendMessageHandler.java
│           │   │   │   │   ├── SetFriendAliasRequestHandler.java
│           │   │   │   │   ├── SetFriendExtraHandler.java
│           │   │   │   │   ├── SetGroupManagerHandler.java
│           │   │   │   │   ├── SyncFriendRequestUnreadHandler.java
│           │   │   │   │   ├── TransferChannelHandler.java
│           │   │   │   │   ├── TransferGroupHandler.java
│           │   │   │   │   ├── UploadDeviceTokenHandler.java
│           │   │   │   │   └── UserSearchHandler.java
│           │   │   │   ├── interception/
│           │   │   │   │   ├── InterceptHandler.java
│           │   │   │   │   ├── Interceptor.java
│           │   │   │   │   └── messages/
│           │   │   │   │       ├── InterceptAbstractMessage.java
│           │   │   │   │       ├── InterceptAcknowledgedMessage.java
│           │   │   │   │       ├── InterceptConnectMessage.java
│           │   │   │   │       ├── InterceptConnectionLostMessage.java
│           │   │   │   │       ├── InterceptDisconnectMessage.java
│           │   │   │   │       ├── InterceptMessage.java
│           │   │   │   │       └── InterceptPublishMessage.java
│           │   │   │   ├── logging/
│           │   │   │   │   └── LoggingUtils.java
│           │   │   │   ├── persistence/
│           │   │   │   │   ├── ChannelLoader.java
│           │   │   │   │   ├── ChatroomLoader.java
│           │   │   │   │   ├── DatabaseStore.java
│           │   │   │   │   ├── GroupLoader.java
│           │   │   │   │   ├── MemoryMessagesStore.java
│           │   │   │   │   ├── MemorySessionStore.java
│           │   │   │   │   ├── MemoryStorageService.java
│           │   │   │   │   ├── MessageLoader.java
│           │   │   │   │   ├── RobotLoader.java
│           │   │   │   │   ├── ServerAPIHelper.java
│           │   │   │   │   ├── UserClientEntry.java
│           │   │   │   │   ├── UserLoader.java
│           │   │   │   │   ├── UserStatusLoader.java
│           │   │   │   │   └── remote/
│           │   │   │   │       └── RequestInfo.java
│           │   │   │   ├── server/
│           │   │   │   │   ├── ConnectionDescriptor.java
│           │   │   │   │   ├── ConnectionDescriptorStore.java
│           │   │   │   │   ├── Constants.java
│           │   │   │   │   ├── DefaultMoquetteSslContextCreator.java
│           │   │   │   │   ├── Server.java
│           │   │   │   │   ├── ServerAcceptor.java
│           │   │   │   │   ├── config/
│           │   │   │   │   │   ├── ClasspathResourceLoader.java
│           │   │   │   │   │   ├── ConfigurationParser.java
│           │   │   │   │   │   ├── FileResourceLoader.java
│           │   │   │   │   │   ├── IConfig.java
│           │   │   │   │   │   ├── IResourceLoader.java
│           │   │   │   │   │   ├── MediaServerConfig.java
│           │   │   │   │   │   ├── MemoryConfig.java
│           │   │   │   │   │   └── ResourceLoaderConfig.java
│           │   │   │   │   └── netty/
│           │   │   │   │       ├── AutoFlushHandler.java
│           │   │   │   │       ├── MoquetteIdleTimeoutHandler.java
│           │   │   │   │       ├── NettyAcceptor.java
│           │   │   │   │       ├── NettyMQTTHandler.java
│           │   │   │   │       ├── NettyUtils.java
│           │   │   │   │       └── metrics/
│           │   │   │   │           ├── BytesMetrics.java
│           │   │   │   │           ├── BytesMetricsCollector.java
│           │   │   │   │           ├── BytesMetricsHandler.java
│           │   │   │   │           ├── MQTTMessageLogger.java
│           │   │   │   │           ├── MessageMetrics.java
│           │   │   │   │           ├── MessageMetricsCollector.java
│           │   │   │   │           └── MessageMetricsHandler.java
│           │   │   │   └── spi/
│           │   │   │       ├── ClientSession.java
│           │   │   │       ├── IMatchingCondition.java
│           │   │   │       ├── IMessagesStore.java
│           │   │   │       ├── IMessaging.java
│           │   │   │       ├── ISessionsStore.java
│           │   │   │       ├── IStore.java
│           │   │   │       ├── MessageGUID.java
│           │   │   │       ├── impl/
│           │   │   │       │   ├── BrokerInterceptor.java
│           │   │   │       │   ├── DebugUtils.java
│           │   │   │       │   ├── DesUtil.java
│           │   │   │       │   ├── InternalRepublisher.java
│           │   │   │       │   ├── MessagesPublisher.java
│           │   │   │       │   ├── PersistentQueueMessageSender.java
│           │   │   │       │   ├── ProtocolProcessor.java
│           │   │   │       │   ├── ProtocolProcessorBootstrapper.java
│           │   │   │       │   ├── Qos1PublishHandler.java
│           │   │   │       │   ├── QosPublishHandler.java
│           │   │   │       │   ├── Utils.java
│           │   │   │       │   ├── security/
│           │   │   │       │   │   ├── ACLFileParser.java
│           │   │   │       │   │   ├── AES.java
│           │   │   │       │   │   ├── AcceptAllAuthenticator.java
│           │   │   │       │   │   ├── Authorization.java
│           │   │   │       │   │   ├── AuthorizationsCollector.java
│           │   │   │       │   │   ├── DBAuthenticator.java
│           │   │   │       │   │   ├── DenyAllAuthorizator.java
│           │   │   │       │   │   ├── FileAuthenticator.java
│           │   │   │       │   │   ├── ITokenGenerator.java
│           │   │   │       │   │   ├── PermitAllAuthorizator.java
│           │   │   │       │   │   ├── ResourceAuthenticator.java
│           │   │   │       │   │   └── TokenAuthenticator.java
│           │   │   │       │   └── subscriptions/
│           │   │   │       │       ├── Token.java
│           │   │   │       │       └── Topic.java
│           │   │   │       └── security/
│           │   │   │           ├── DES.java
│           │   │   │           ├── IAuthenticator.java
│           │   │   │           ├── IAuthorizator.java
│           │   │   │           ├── ISslContextCreator.java
│           │   │   │           └── Tokenor.java
│           │   │   └── netty/
│           │   │       └── handler/
│           │   │           └── codec/
│           │   │               └── mqtt/
│           │   │                   ├── MqttCodecUtil.java
│           │   │                   ├── MqttConnAckMessage.java
│           │   │                   ├── MqttConnAckVariableHeader.java
│           │   │                   ├── MqttConnectAckPayload.java
│           │   │                   ├── MqttConnectMessage.java
│           │   │                   ├── MqttConnectPayload.java
│           │   │                   ├── MqttConnectReturnCode.java
│           │   │                   ├── MqttConnectVariableHeader.java
│           │   │                   ├── MqttConstant.java
│           │   │                   ├── MqttDecoder.java
│           │   │                   ├── MqttEncoder.java
│           │   │                   ├── MqttFixedHeader.java
│           │   │                   ├── MqttIdentifierRejectedException.java
│           │   │                   ├── MqttMessage.java
│           │   │                   ├── MqttMessageBuilders.java
│           │   │                   ├── MqttMessageFactory.java
│           │   │                   ├── MqttMessageIdAndPropertiesVariableHeader.java
│           │   │                   ├── MqttMessageIdVariableHeader.java
│           │   │                   ├── MqttMessageType.java
│           │   │                   ├── MqttProperties.java
│           │   │                   ├── MqttPubAckMessage.java
│           │   │                   ├── MqttPubReplyMessageVariableHeader.java
│           │   │                   ├── MqttPublishMessage.java
│           │   │                   ├── MqttPublishVariableHeader.java
│           │   │                   ├── MqttQoS.java
│           │   │                   ├── MqttReasonCodeAndPropertiesVariableHeader.java
│           │   │                   ├── MqttSubAckMessage.java
│           │   │                   ├── MqttSubAckPayload.java
│           │   │                   ├── MqttSubscribeMessage.java
│           │   │                   ├── MqttSubscribePayload.java
│           │   │                   ├── MqttSubscriptionOption.java
│           │   │                   ├── MqttTopicSubscription.java
│           │   │                   ├── MqttUnacceptableProtocolVersionException.java
│           │   │                   ├── MqttUnsubAckMessage.java
│           │   │                   ├── MqttUnsubAckPayload.java
│           │   │                   ├── MqttUnsubscribeMessage.java
│           │   │                   ├── MqttUnsubscribePayload.java
│           │   │                   ├── MqttVersion.java
│           │   │                   └── package-info.java
│           │   └── win/
│           │       └── liyufan/
│           │           └── im/
│           │               ├── DBUtil.java
│           │               ├── FrequencyLimistCounter.java
│           │               ├── GitRepositoryState.java
│           │               ├── GsonUtil.java
│           │               ├── HttpUtils.java
│           │               ├── IDUtils.java
│           │               ├── IMTopic.java
│           │               ├── MessageBundle.java
│           │               ├── MessageShardingUtil.java
│           │               ├── RateLimiter.java
│           │               ├── SensitiveFilter.java
│           │               ├── SpinLock.java
│           │               ├── UUIDGenerator.java
│           │               ├── UserSettingScope.java
│           │               ├── Utility.java
│           │               └── extended/
│           │                   └── mqttmessage/
│           │                       └── ModifiedMqttPubAckMessage.java
│           └── resources/
│               ├── c3p0-config.xml
│               └── log4j2.xml
├── build.sh
├── checkstyle-suppressions.xml
├── checkstyle.xml
├── common/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── wildfirechat/
│                       ├── common/
│                       │   ├── APIPath.java
│                       │   ├── ErrorCode.java
│                       │   └── IMExceptionEvent.java
│                       ├── pojos/
│                       │   ├── ArticleContent.java
│                       │   ├── BroadMessageData.java
│                       │   ├── BroadMessageResult.java
│                       │   ├── ChannelUpdateEvent.java
│                       │   ├── ChatroomMemberUpdateEvent.java
│                       │   ├── ChatroomUpdateEvent.java
│                       │   ├── ConferenceCreateEvent.java
│                       │   ├── ConferenceDestroyEvent.java
│                       │   ├── ConferenceJoinEvent.java
│                       │   ├── ConferenceLeaveEvent.java
│                       │   ├── ConferencePublishEvent.java
│                       │   ├── ConferenceUnpublishEvent.java
│                       │   ├── Conversation.java
│                       │   ├── DeleteMessageData.java
│                       │   ├── FilesPojo.java
│                       │   ├── ForwardDeviceMessageData.java
│                       │   ├── GetConversationFilesPojo.java
│                       │   ├── GetOnlineUserCountResult.java
│                       │   ├── GetOnlineUserRequest.java
│                       │   ├── GetOnlineUserResult.java
│                       │   ├── GetUserFilesPojo.java
│                       │   ├── GetUserSessionResult.java
│                       │   ├── GroupMemberUpdateEvent.java
│                       │   ├── GroupNotificationBinaryContent.java
│                       │   ├── GroupUpdateEvent.java
│                       │   ├── HealthCheckResult.java
│                       │   ├── InputAddFriendRequest.java
│                       │   ├── InputAddGroupMember.java
│                       │   ├── InputApplicationGetUserInfo.java
│                       │   ├── InputBlacklistRequest.java
│                       │   ├── InputChannelId.java
│                       │   ├── InputChannelSubscribe.java
│                       │   ├── InputChatroomId.java
│                       │   ├── InputChatroomMute.java
│                       │   ├── InputClearUserMessages.java
│                       │   ├── InputConferenceRequest.java
│                       │   ├── InputCountOffset.java
│                       │   ├── InputCreateChannel.java
│                       │   ├── InputCreateChatroom.java
│                       │   ├── InputCreateDevice.java
│                       │   ├── InputCreateGroup.java
│                       │   ├── InputCreateRobot.java
│                       │   ├── InputDestoryChatroom.java
│                       │   ├── InputDestroyUser.java
│                       │   ├── InputDeviceId.java
│                       │   ├── InputDismissGroup.java
│                       │   ├── InputGetAlias.java
│                       │   ├── InputGetChannelInfo.java
│                       │   ├── InputGetChatroomInfo.java
│                       │   ├── InputGetConvReadTime.java
│                       │   ├── InputGetFriendList.java
│                       │   ├── InputGetGroup.java
│                       │   ├── InputGetGroupMember.java
│                       │   ├── InputGetPresignedUploadUrl.java
│                       │   ├── InputGetToken.java
│                       │   ├── InputGetUserGroupByType.java
│                       │   ├── InputGetUserInfo.java
│                       │   ├── InputGetUserList.java
│                       │   ├── InputGetUserSK.java
│                       │   ├── InputGroupBase.java
│                       │   ├── InputHandleFriendRequest.java
│                       │   ├── InputIntValue.java
│                       │   ├── InputKickoffGroupMember.java
│                       │   ├── InputMessageUid.java
│                       │   ├── InputModifyChannelInfo.java
│                       │   ├── InputModifyGroupInfo.java
│                       │   ├── InputMuteGroupMember.java
│                       │   ├── InputOutputDomainInfo.java
│                       │   ├── InputOutputDomainInfoList.java
│                       │   ├── InputOutputSensitiveWords.java
│                       │   ├── InputOutputUserBlockStatus.java
│                       │   ├── InputOutputUserInfo.java
│                       │   ├── InputQuitGroup.java
│                       │   ├── InputRobotId.java
│                       │   ├── InputSetChatroomBlacklist.java
│                       │   ├── InputSetChatroomManager.java
│                       │   ├── InputSetGroupManager.java
│                       │   ├── InputSetGroupMemberAlias.java
│                       │   ├── InputSetGroupMemberExtra.java
│                       │   ├── InputStringList.java
│                       │   ├── InputStringValue.java
│                       │   ├── InputSubscribeChannel.java
│                       │   ├── InputTransferGroup.java
│                       │   ├── InputUpdateAlias.java
│                       │   ├── InputUpdateFriendExtra.java
│                       │   ├── InputUpdateFriendStatusRequest.java
│                       │   ├── InputUpdateUserInfo.java
│                       │   ├── InputUserConversation.java
│                       │   ├── InputUserId.java
│                       │   ├── InputUserLogin.java
│                       │   ├── IntStringPairPojo.java
│                       │   ├── LongPojo.java
│                       │   ├── MessagePayload.java
│                       │   ├── MultiMessageResult.java
│                       │   ├── MulticastMessageData.java
│                       │   ├── MyInfoType.java
│                       │   ├── OutputApplicationConfigData.java
│                       │   ├── OutputApplicationUserInfo.java
│                       │   ├── OutputBooleanValue.java
│                       │   ├── OutputChatroomBlackInfos.java
│                       │   ├── OutputCheckUserOnline.java
│                       │   ├── OutputClient.java
│                       │   ├── OutputCreateChannel.java
│                       │   ├── OutputCreateChatroom.java
│                       │   ├── OutputCreateDevice.java
│                       │   ├── OutputCreateGroupResult.java
│                       │   ├── OutputCreateRobot.java
│                       │   ├── OutputCreateUser.java
│                       │   ├── OutputDevice.java
│                       │   ├── OutputDeviceHost.java
│                       │   ├── OutputDeviceList.java
│                       │   ├── OutputGetAlias.java
│                       │   ├── OutputGetChannelInfo.java
│                       │   ├── OutputGetChatroomInfo.java
│                       │   ├── OutputGetFriendList.java
│                       │   ├── OutputGetIMTokenData.java
│                       │   ├── OutputGetUserList.java
│                       │   ├── OutputGroupIds.java
│                       │   ├── OutputGroupMemberList.java
│                       │   ├── OutputLoginData.java
│                       │   ├── OutputMessageData.java
│                       │   ├── OutputNotifyChannelSubscribeStatus.java
│                       │   ├── OutputPresignedUploadUrl.java
│                       │   ├── OutputReadData.java
│                       │   ├── OutputRecallMessageData.java
│                       │   ├── OutputRobot.java
│                       │   ├── OutputRouteData.java
│                       │   ├── OutputStringList.java
│                       │   ├── OutputTimestamp.java
│                       │   ├── OutputUserBlockStatusList.java
│                       │   ├── OutputUserChatroom.java
│                       │   ├── OutputUserInfoList.java
│                       │   ├── OutputUserStatus.java
│                       │   ├── PojoChannelMenu.java
│                       │   ├── PojoConferenceCreate.java
│                       │   ├── PojoConferenceInfo.java
│                       │   ├── PojoConferenceInfoList.java
│                       │   ├── PojoConferenceParticipant.java
│                       │   ├── PojoConferenceParticipantList.java
│                       │   ├── PojoConferenceRecording.java
│                       │   ├── PojoConferenceRoomId.java
│                       │   ├── PojoConferenceRtpForwardReq.java
│                       │   ├── PojoConferenceRtpForwarders.java
│                       │   ├── PojoConferenceStopRtpForwardReq.java
│                       │   ├── PojoGroup.java
│                       │   ├── PojoGroupInfo.java
│                       │   ├── PojoGroupInfoList.java
│                       │   ├── PojoGroupMember.java
│                       │   ├── RecallMessageData.java
│                       │   ├── RecallMultiCastMessageData.java
│                       │   ├── RelationPojo.java
│                       │   ├── RelationUpdateEvent.java
│                       │   ├── ReplyMessageData.java
│                       │   ├── RepublishChannelMessageData.java
│                       │   ├── RobotCallbackPojo.java
│                       │   ├── SendChannelMessageData.java
│                       │   ├── SendMessageData.java
│                       │   ├── SendMessageResult.java
│                       │   ├── StringPairPojo.java
│                       │   ├── SystemSettingPojo.java
│                       │   ├── UpdateMessageContentData.java
│                       │   ├── UserOnlineStatus.java
│                       │   ├── UserSettingPojo.java
│                       │   ├── mesh/
│                       │   │   ├── MeshRestResult.java
│                       │   │   ├── PojoAddFriendReq.java
│                       │   │   ├── PojoAddGroupMember.java
│                       │   │   ├── PojoAddJoinGroupRequest.java
│                       │   │   ├── PojoDeleteFriend.java
│                       │   │   ├── PojoDismissGroup.java
│                       │   │   ├── PojoDomainPingRequest.java
│                       │   │   ├── PojoDomainPingResponse.java
│                       │   │   ├── PojoGroupUpdated.java
│                       │   │   ├── PojoHandleFriendRequestReq.java
│                       │   │   ├── PojoKickoffGroupMember.java
│                       │   │   ├── PojoModifyGroupInfo.java
│                       │   │   ├── PojoPublishMessageReq.java
│                       │   │   ├── PojoQuitGroup.java
│                       │   │   ├── PojoRecallMessageReq.java
│                       │   │   ├── PojoSearchUserReq.java
│                       │   │   ├── PojoSearchUserRes.java
│                       │   │   ├── PojoSendMessageReq.java
│                       │   │   ├── PojoString.java
│                       │   │   ├── PojoStringList.java
│                       │   │   ├── PojoTransferGroup.java
│                       │   │   ├── PojoUserConferenceEvent.java
│                       │   │   ├── PojoUserConferenceRequest.java
│                       │   │   └── PojoUserConferenceResponse.java
│                       │   └── moments/
│                       │       ├── CommentMsgPojo.java
│                       │       ├── CommentPojo.java
│                       │       ├── FeedPojo.java
│                       │       ├── FeedsPojo.java
│                       │       ├── IdPojo.java
│                       │       ├── MediaEntry.java
│                       │       ├── MomentProfilePojo.java
│                       │       ├── PostFeedResult.java
│                       │       ├── PullCommentsRequestPojo.java
│                       │       ├── PullFeedRequestPojo.java
│                       │       ├── PullOneFeedRequestPojo.java
│                       │       ├── PullProfileRequestPojo.java
│                       │       ├── PushProfileListRequestPojo.java
│                       │       └── PushProfileValueRequestPojo.java
│                       └── proto/
│                           ├── ProtoConstants.java
│                           └── WFCMessage.java
├── distribution/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── assembly/
│           │   └── assembly.xml
│           ├── checker/
│           │   └── README.md
│           ├── deb/
│           │   └── control/
│           │       ├── control
│           │       ├── postinst
│           │       └── postrm
│           ├── files/
│           │   └── README.txt
│           ├── resources/
│           │   ├── c3p0-config.xml
│           │   ├── hazelcast.xml
│           │   ├── log4j2.xml
│           │   └── wildfirechat.conf
│           ├── rpm/
│           │   ├── install.sh
│           │   └── uninstall.sh
│           └── scripts/
│               ├── stop.sh
│               ├── wildfirechat.bat
│               └── wildfirechat.sh
├── docker/
│   ├── Dockerfile
│   └── README.md
├── flyway_repaire_migrate_38.sql
├── license-eplv10-aslv20.html
├── license_moquette.txt
├── pom.xml
├── release_note.md
├── sdk/
│   ├── README.md
│   ├── pom.xml
│   ├── sdk_readme.txt
│   └── src/
│       └── main/
│           └── java/
│               ├── cn/
│               │   └── wildfirechat/
│               │       └── sdk/
│               │           ├── AdminConfig.java
│               │           ├── ChannelAdmin.java
│               │           ├── ChannelServiceApi.java
│               │           ├── ChatroomAdmin.java
│               │           ├── ConferenceAdmin.java
│               │           ├── GeneralAdmin.java
│               │           ├── GenerateTestData.java
│               │           ├── GroupAdmin.java
│               │           ├── Main.java
│               │           ├── MeshAdmin.java
│               │           ├── MessageAdmin.java
│               │           ├── MomentsAdmin.java
│               │           ├── RelationAdmin.java
│               │           ├── RobotService.java
│               │           ├── SensitiveAdmin.java
│               │           ├── UserAdmin.java
│               │           ├── messagecontent/
│               │           │   ├── ArticlesMessageContent.java
│               │           │   ├── CallStartMessageContent.java
│               │           │   ├── CardMessageContent.java
│               │           │   ├── DeleteMessageContent.java
│               │           │   ├── FileMessageContent.java
│               │           │   ├── ImageMessageContent.java
│               │           │   ├── LinkMessageContent.java
│               │           │   ├── LocationMessageContent.java
│               │           │   ├── MediaMessageContent.java
│               │           │   ├── MessageContent.java
│               │           │   ├── MessageContentFactory.java
│               │           │   ├── MultiCallOngoingMessageContent.java
│               │           │   ├── NotDeliveredMessageContent.java
│               │           │   ├── PTTSoundMessageContent.java
│               │           │   ├── RecallMessageContent.java
│               │           │   ├── RichNotificationMessageContent.java
│               │           │   ├── SoundMessageContent.java
│               │           │   ├── StickerMessageContent.java
│               │           │   ├── StreamTextGeneratedMessageContent.java
│               │           │   ├── StreamTextGeneratingMessageContent.java
│               │           │   ├── TextMessageContent.java
│               │           │   ├── TipNotificationMessageContent.java
│               │           │   ├── TypingMessageContent.java
│               │           │   ├── UnknownMessageContent.java
│               │           │   └── VideoMessageContent.java
│               │           ├── model/
│               │           │   ├── IMResult.java
│               │           │   ├── Message.java
│               │           │   └── QuoteInfo.java
│               │           └── utilities/
│               │               ├── AdminHttpUtils.java
│               │               ├── ChannelHttpUtils.java
│               │               ├── ClassUtil.java
│               │               ├── HttpUtils.java
│               │               ├── JsonUtils.java
│               │               └── RobotHttpUtils.java
│               └── ikidou/
│                   └── reflect/
│                       ├── TypeBuilder.java
│                       ├── TypeToken.java
│                       ├── exception/
│                       │   └── TypeException.java
│                       └── typeimpl/
│                           ├── ParameterizedTypeImpl.java
│                           └── WildcardTypeImpl.java
└── systemd/
    ├── README.md
    └── im-server.service

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4
max_line_length=120

[*.gradle]
indent_size = 2


================================================
FILE: .gitattributes
================================================
*.cpp linguist-language=java
*.cc linguist-language=java


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
## 提issue小提示
为了尽快定位问题,需要提供足够的信息,请按照我们的要求格式来提问。***如果您不按照格式提问,我们将无法回复您的问题***

#### 操作说明
详细说明操作那个界面,每一步骤都要说得详细,如果是SDK或者api使用问题,需要详细说明调用的那个函数,参数都是什么。

#### 表现现象
描述一下什么现象,比如说函数返回error,errorcode是多少,或者界面上是什么状态,比如发送消息显示发送失败的红点。不要笼统的说功能有问题,不起作用。

#### 预期结果
你认为正确的表现应该是什么样的。

#### 补充条件
是否是必现的,还是偶现的?是否只有在特殊的网络/设备/平台上出现,还是所有的都出现。还有您用的版本是什么时候的,是不是最新版

#### demo对比结果
请用demo对比测试,demo上是什么状态。

#### 检索已有问题
除了可以检索已有issue外,还可以去野火论坛查找已有问题,论坛地址为 https://bbs.wildfirechat.cn

#### star 我们
给我们点个star,可以及时接收到我们回复信息,另外也是对我们支持人员辛苦工作的认可,激励我们更好更快地为大家服务。


================================================
FILE: .gitignore
================================================
/build
*/build/
/target/
/parser/target/
/benchmarking/target/
.idea/
*.iml
broker/target/
client/target/
parser_commons/target/
netty_parser/target/
netty_parser/target/
parser_commons/target/
distribution/target/
broker/moquette.log
broker/runner
/bundle/target/
/bundle/runner/
/osgi_test/target/
/perf/target/
/mapdb_storage/target/
*~
*.log*
.DS_Store
.settings/
.project
.classpath
/*/bin/
*.swp

*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
broker/*moquette_store.*
embedding_moquette/target/
broker/nb-configuration.xml
broker/nbactions-Server.xml

maven-metadata.xml
/.gradle/
/bin/
broker/config/git.properties
distribution/src/main/resources/git.properties
license/target
server/target
broker/h2db
broker/media
common/target
server/target
sdk/target
moments/target
monitor
wildfire_jmeter
git.properties
wildfirechat.license
broker/logs


================================================
FILE: .travis.yml
================================================
language: java
jdk:
  - oraclejdk8
before_cache:
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/

script:
    - ./gradlew install test


================================================
FILE: LICENSE
================================================
Creative Commons Attribution-NoDerivs 3.0 Unported

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
c. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
d. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
e. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
f. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
g. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
i. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
b. to Distribute and Publicly Perform the Work including as incorporated in Collections.
c. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.

4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested.
b. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(b) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
c. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
b. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
c. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
d. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
e. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
Creative Commons Notice

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License.

Creative Commons may be contacted at http://creativecommons.org/.



================================================
FILE: LICENSE_996
================================================
Copyright (c) <2019> <wildfirechat>

Anti 996 License Version 1.0 (Draft)

Permission is hereby granted to any individual or legal entity
obtaining a copy of this licensed work (including the source code,
documentation and/or related items, hereinafter collectively referred
to as the "licensed work"), free of charge, to deal with the licensed
work for any purpose, including without limitation, the rights to use,
reproduce, modify, prepare derivative works of, distribute, publish 
and sublicense the licensed work, subject to the following conditions:

1. The individual or the legal entity must conspicuously display,
without modification, this License and the notice on each redistributed 
or derivative copy of the Licensed Work.

2. The individual or the legal entity must strictly comply with all
applicable laws, regulations, rules and standards of the jurisdiction
relating to labor and employment where the individual is physically
located or where the individual was born or naturalized; or where the
legal entity is registered or is operating (whichever is stricter). In
case that the jurisdiction has no such laws, regulations, rules and
standards or its laws, regulations, rules and standards are
unenforceable, the individual or the legal entity are required to
comply with Core International Labor Standards.

3. The individual or the legal entity shall not induce or force its
employee(s), whether full-time or part-time, or its independent
contractor(s), in any methods, to agree in oral or written form, to
directly or indirectly restrict, weaken or relinquish his or her
rights or remedies under such laws, regulations, rules and standards
relating to labor and employment as mentioned above, no matter whether
such written or oral agreement are enforceable under the laws of the
said jurisdiction, nor shall such individual or the legal entity
limit, in any methods, the rights of its employee(s) or independent
contractor(s) from reporting or complaining to the copyright holder or
relevant authorities monitoring the compliance of the license about
its violation(s) of the said license.

THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION WITH THE
LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK.


================================================
FILE: LICENSE_mqtt-jmeter
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# 野火IM解决方案
野火IM是专业级的即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。

## 功能特性
* 极致地硬件利用率,IM服务最低128M内存即可运行,上不封顶。
* 协议先进,采用MQTT+Protobuf组合,流量和性能极致优化。
* 性能强大,专业版IM服务支持百万在线和集群部署,业内顶尖性能水平,详情参考野火性能报告。
* 部署运维简单,依赖服务少,稍加配置一键启动。
* 安全加密。网络连接AES加密。客户端数据库SqlCipher加密。安全无小事。
* 全平台客户端,支持Android、iOS、鸿蒙、Web、小程序、UniApp、Flutter、Windows、Mac OS、Linux等所有常见平台。
* 四端同时在线(移动端,pc端,web端和小程序端),数据和状态多端完美同步。
* 支持国产化。支持国产化操作系统、国产化芯片和国产数据库。支持国密加密。
* 客户端使用微信[mars](https://github.com/tencent/mars)连接库,野火IM可能是最适应中国网络国情的即时通讯服务。
* 支持加速点加速,即可用于全球应用,也可用于政企内外双网复杂的网络环境。
* 支持阅读回执和在线状态功能,适用于办公环境。
* 音视频多种解决方案,丰俭由人,可自由选择。
* 高级音视频功能强大,支持9人以上的群组视频通话,支持1080P视频,支持会议模式,支持百人以上会议,支持服务器端录制。
* 全私有部署,可不依赖任何第三方服务,完全内网部署。
* 功能齐全,涵盖所有常见即时通讯功能。另外具有强大的可扩展能力。代码开源率高,二次开发简单。
* 结构设计合理,客户端分功能库、UI库和应用三层。应用成熟完善,开箱即用,也可把SDK嵌入其它应用。
* 拥有应用开放平台,可以开发和创建自建应用,扩展您的工作台。
* API丰富,方便与其它服务系统的对接。
* 拥有机器人和公众号功能,免费的频道(公众号)管理后台。
* 超级群组功能,可以支持万人大群。
* 支持多个IM服务组网互通,打破孤岛,适用于集团公司下多个分公司互联互通。
* 社区版IM服务和移动端免费商用,可以免费构建出完备的移动互联网应用。
* 收费项目非常便宜,野火独有的试用模式,可以先部署到客户环境试用6个月,试用满意后再购买,避免上当受骗。
* 技术支持专业高效,***核心研发***及时处理issue和工单,能最快解决用户的技术难题。技术支持不收费,让客户顺利使用是我们最大的愿望。

## 野火开源项目
主要包括以下项目:

| [GitHub仓库](https://github.com/wildfirechat)                                    | [码云仓库](https://gitee.com/wfchat)                                        | 说明                                                                                      
|--------------------------------------------------------------------------------|-------------------------------------------------------------------------| --------------------------------------------------------------------------
| [im-server](https://github.com/wildfirechat/im-server)                         | [im-server](https://gitee.com/wfchat/im-server)                         | 野火社区版IM服务,野火IM的核心服务,处理所有IM相关业务。  |
| [app-server](https://github.com/wildfirechat/app-server)                       | [app-server](https://gitee.com/wfchat/app-server)                       | Demo应用服务,模拟客户的应用服登陆处理逻辑及部分二次开发示例。 |
| [robot_server](https://github.com/wildfirechat/robot_server)                   | [robot_server](https://gitee.com/wfchat/robot_server)                   | 机器人服务,演示野火机器人对接其它系统的方法。 |
| [push_server](https://github.com/wildfirechat/push_server)                     | [push_server](https://gitee.com/wfchat/push_server)                     | 推送服务器,可以对接所有的系统厂商推送服务或者第三方推送服务。 |
| [wf-minio](https://github.com/wildfirechat/WF-minio)                           | [wf-minio](https://gitee.com/wfchat/WF-minio)                           | 私有对象存储服务,用来支持野火IM专业版的文件存储。 |
| [wf-janus](https://github.com/wildfirechat/wf-janus  )                         | [wf-janus](https://gitee.com/wfchat/wf-janus  )                         | 高级音视频媒体服务。 |
| [open-platform](https://github.com/wildfirechat/open-platform)                 | [open-platform](https://gitee.com/wfchat/open-platform)                 | 野火开放平台服务。  |
| [daily-report](https://github.com/wildfirechat/daily-report)                   | [daily-report](https://github.com/wildfirechat/daily-report)            | 野火开放平台日报 demo服务。 |
| [channel-platform](https://github.com/wildfirechat/channel-platform)           | [channel-platform](https://gitee.com/wfchat/channel-platform)           | 野火频道(公众号)平台服务。  |
| [organization-platform](https://github.com/wildfirechat/organization-platform) | [organization-platform](https://gitee.com/wfchat/organization-platform) | 野火组织通讯录服务。  |
| [archive-server](https://github.com/wildfirechat/archive-server)               | [archive-server](https://gitee.com/wfchat/archive-server)               | 野火组织通讯录服务。  |
| [android-chat](https://github.com/wildfirechat/android-chat)                   | [android-chat](https://gitee.com/wfchat/android-chat)                   | 野火IM Android SDK源码和App源码。 |
| [ios-chat](https://github.com/wildfirechat/ios-chat)                           | [ios-chat](https://gitee.com/wfchat/ios-chat)                           | 野火IM iOS SDK源码和App源码。|
| [pc-chat(electron)](https://github.com/wildfirechat/vue-pc-chat)               | [pc-chat(electron)](https://gitee.com/wfchat/vue-pc-chat)               | 基于[Electron](https://electronjs.org/)开发的PC 端                   |                         |
| [pc-chat(Qt)](https://github.com/wildfirechat/qt-pc-chat)                      | [pc-chat(Qt)](https://gitee.com/wfchat/qt-pc-chat)                      | 基于Qt开发的PC 端                   |                         |
| [web-chat](https://github.com/wildfirechat/vue-chat)                           | [web-chat](https://gitee.com/wfchat/vue-chat)                           | 野火IM Web 端, [体验地址](https://web.wildfirechat.cn)。  |
| [wx-chat](https://github.com/wildfirechat/wx-chat)                             | [wx-chat](https://gitee.com/wfchat/wx-chat)                             | 小程序平台的Demo(支持微信、百度、阿里、字节、QQ 等小程序平台)。  |
| [uni-chat](https://github.com/wildfirechat/uni-chat)                           | [uni-chat](https://gitee.com/wfchat/uni-chat)                           | UniApp平台移动端应用(使用原生插件)。   |
| [uni-wfc-client](https://github.com/wildfirechat/uni-wfc-client)               | [uni-wfc-client](https://gitee.com/wfchat/uni-wfc-client)               | UniApp平台原生插件。已[商店](https://ext.dcloud.net.cn/plugin?id=7895)上架   |
| [flutter-chat](https://github.com/wildfirechat/flutter-chat)                   | [flutter-chat](https://gitee.com/wfchat/flutter-chat)                   | Flutter平台原生插件,支持IM和音视频通话。   |
| [docs](https://github.com/wildfirechat/docs)                                   | [docs](https://gitee.com/wfchat/docs)                                   | 野火IM相关文档,包含设计、概念、开发、使用说明,[在线查看](https://docs.wildfirechat.cn/)。 |

## 野火开发文档
[在线文档](https://docs.wildfirechat.cn/)

## 野火IM论坛
[野火IM论坛](https://bbs.wildfirechat.cn)

## 野火性能测试报告及测试方法
[Github](https://github.com/wildfirechat/Performance_Test), [码云](https://gitee.com/wfchat/Performance_Test)。

## 野火Demo
请使用微信扫码下载安装体验野火IM移动客户端

![野火IM](http://static.wildfirechat.cn/download_qrcode.png)

Web客户端点击[这里](https://web.wildfirechat.cn)

PC客户端点[这里](https://github.com/wildfirechat/vue-pc-chat/releases)下载安装。

小程序客户端请用微信扫码

![野火IM](http://static.wildfirechat.net/wx.jpg)

## 快速开始
可以按照[快速开始](https://docs.wildfirechat.cn/quick_start/)来部署应用服务和IM服务,然后打包移动端,就可以完成聊天和通话功能。

之后再部署开放平台服务、频道(公众号)服务、机器人服务、推送服务、Turn服务(音视频服务)来实现完整的应用功能,详情可以详细阅读文档。

## 联系我们
商务合作请微信联系:

* 微信1:wildfirechat
* 微信2:wfchat

## 问题交流

1. 如果大家发现bug,请在GitHub或码云提issue;如果有需求也请给我们提issue。
2. 其他问题,请到[野火IM论坛](http://bbs.wildfirechat.cn/)进行交流学习
3. 关注我们的公众号。我们有新版本发布或者有重大更新会通过公众号通知大家,另外我们也会不定期的发布一些关于野火IM的技术介绍。

<img src="http://static.wildfirechat.cn/wx_wfc_qrcode.jpg" width = 50% height = 50% />

我们有核心研发工程师轮流值班处理issue和论坛,会及时处理的,疑难Bug的修改和新需求的开发我们也会尽快解决。


## 编译
```
mvn clean package
```
生成的目标文件在```./distribution/target/distribution-xxxx-bundle-tar.tar.gz```

## 配置
解压```distribution-xxxx-bundle-tar.tar.gz```,修改解压出来的```config```目录下的```wildfirechat.conf```,可以阅读配置文件注释和文档,对其它配置项进行调整。

## 运行
在解压```distribution-xxxx-bundle-tar.tar.gz```后的目录下运行如下命令:
```
./bin/wildfirechat.sh
```

## 验证
1. 在浏览器中输入地址 ```http://${ip}/api/version```可以看到返回一个json文件。
2. 部署[应用服务](https://github.com/wildfirechat/app-server),配置和编译[Android客户端](https://github.com/wildfirechat/android-chat)和[iOS客户端](https://github.com/wildfirechat/ios-chat)进行验证。详情可参考[快速开始](https://docs.wildfirechat.cn/quick_start/)。

## 打包RPM格式
打包会生成Java包和deb安装包,如果需要rpm安装包,请在```distribution/pom.xml```中取消注释生成rpm包的plugin。另外还需要本地安装有rpm,在linux或者mac系统中很容易安装,在windows系统需要安装cygwin并安装rpm,具体信息请百度查询。

修改之后运行编译命令```mvn clean package```,rpm包生成在```distribution/target```目录下。

## Epoll
在linux系统中打开Epoll开关可以提高性能,默认软件包内打包的是x86_64的epoll native sdk。如果是arm64的机器,可以把[broker pom](./broker/pom.xml)文件中修改如下:
```xml
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
<!--    <classifier>linux-x86_64</classifier>-->
    <classifier>linux-aarch_64</classifier>
</dependency>
```
然后重新打包。专业版IM服务软件包中有arm64架构的sdk,可以直接替换。epoll只支持x86_64和arm64两个架构,其他架构不要把epoll开关打开。

## 升级说明
1. 从0.42 版本增加了群成员数限制,默认为2000。如果您从之前的版本升级到这个版本或以后,需要注意到群成员数的限制。升级之后超出限制的群不受影响,但不能继续加人,如果您想修改默认值,可以在升级版本之后,修改t_setting表,把默认的大小改为您期望的人数。另外修改t_group表,把已经存在的群组max_member_count改成您期望的,然后重启。
2. 0.50版本添加了是否允许客户端发送群操作通知的配置。如果您在客户端自定义群通知,需要在服务器端配置允许,没有使用自定义群操作通知的不受影响。***
3. 0.46和0.47版本升级到0.48及以后版本时,可能会提示flyway migrate 38错误,请执行 [修复脚本](https://github.com/wildfirechat/server/blob/wildfirechat/flyway_repaire_migrate_38.sql) 进行修复。0.46和0.47版本之外的版本不会出现此问题。
4. 从0.54之前版本升级到0.54及以后版本时,会提示flyway migrate错误。因为0.54版本删除了sql脚本中默认敏感词的内容,flyway checksum失败。请执行```update flyway_schema_history set checksum = 0 where script = 'V17__add_default_sensitive_word.sql';```来修复。
5. 从0.59之前的版本升级到之后的版本执行数据库升级时间比较长,请耐心等待提示运行成功,避免中途中断。
6. 0.62/0.63 版本有严重的问题,请使用0.64及以后版本,或者0.61版。
7. 从0.68 版本起添加了pc在线是否默认手机接收推送的开关,默认为开,与以前版本作用相反,请注意兼容(可以关掉与之前保持一致或者升级客户端)
8. 从0.78 版本起把MySQL数据库中关键字都改为大小写敏感,另外生成id的方法也做了改变,只生成小写的id,避免出现id重复的问题,建议所有客户都升级
9. 从0.79 版本起把log4j升级到log4j2,因为log4j已经不再维护而且还有已知的漏洞,建议所有客户都升级,升级时注意更新log4j2的配置文件
10. 0.97版本更改了启动脚本```wildfirechat.sh```,如果是升级服务,请注意更新启动脚本。

## 维护说明
野火设计理念当中,IM服务和客户端协议栈构成个管道工具,数据在人和人或者人和服务或者服务和服务之间传递,可以通过Server API和自定义消息来对接和开发业务。业务系统把IM系统当作一个工具来使用,是不需要把任何业务逻辑写在IM服务中的。

如果修改了IM服务可能会引起跟客户端协议栈的不兼容,以后也没有可能从社区版IM服务迁移到专业版IM服务,还有一旦修改就跟我们代码不一样了,如果出了问题我们就无法分析和解决。所以 ***我们强烈不推荐在IM服务修改代码,如果修改过就不再提供任何技术支持和服务了***。除了IM服务以外的所有代码可以任意修改。

现有接口足够对接和二开任何业务了,如果发现无法实现你们的业务需求,可以在[论坛](https://bbs.wildfirechat.cn)来咨询,我们会分析如何实现,如果需要添加新接口,我们会及时免费添加。请切记:***不要修改IM服务的代码!*** ***不要修改IM服务的代码!*** ***不要修改IM服务的代码!***

详细维护说明请参考 [野火维护说明](https://docs.wildfirechat.cn/base_knowledge/maintain.html)。

## 服务对象
因为野火的使用范围比较广,难免被一些不法分子利用,国内反诈反赌力度很大,所以国内多地警方都跟我们都有过联系。***为了预防我们的产品被用于非法目的,试用及购买只能支持境内法人单位,不接受个人或者境外团体。如果我们发现产品被用于非法目的,我们会立即停止技术支持服务并且报警和配合警方调查。请用于非法目的用户绕行!***

## 群的性能问题
群的大小和性能不是线性相关的,而是O(N²)的关系,这是群的特性决定的。所以社区版IM服务很难支持很大的群人数,我们建议最大群不要超过500人,像微信的群大小一样。修改方法是修改数据库中```t_settings```表中的群最大人数。

如果是专业版IM服务,普通群性能会有些加强,但也不会提高太多,所以我们就开发了超级群,可以支持上万群成员。关于超级群,请参考[野火超级群组](https://mp.weixin.qq.com/s/ov5ZiaEIUZuvgFBXOrcjbg)。现有客户有接近10W的群组成员能够流畅稳定地运行。

## 网络问题
如果是自建机房或者私有网络,可能会有跨运营商瓶颈,详情请参考[《从野火 IM 的网络踩坑经历,聊聊跨运营商访问的那些坑》](https://mp.weixin.qq.com/s/Pa8b93oMk58fjMgwtwmePQ)。

## 常见问题
请参考文档[常见问题](https://docs.wildfirechat.cn/faq/server.html)

## 应用截图
登录界面

<img src="./screenshots/1_login.png" width = 50% height = 50% />

会话列表

<img src="./screenshots/2_conversation_list.png" width = 50% height = 50% />

好友列表

<img src="./screenshots/3_contacts_list.png" width = 50% height = 50% />

工作台

<img src="./screenshots/4_workplatform.png" width = 50% height = 50% />

发现

<img src="./screenshots/5_discover.png" width = 50% height = 50% />

我的页面

<img src="./screenshots/6_settings.png" width = 50% height = 50% />

消息聊天

<img src="./screenshots/7_conversation.png" width = 50% height = 50% />

动态表情

<img src="./screenshots/8_conversation_sticker.png" width = 50% height = 50% />

语音消息

<img src="./screenshots/9_conversation_voice_msg.png" width = 50% height = 50% />

位置消息

<img src="./screenshots/10_conversation_location.png" width = 50% height = 50% />

拍摄图片或者小视频

<img src="./screenshots/11_conversation_capture.jpeg" width = 50% height = 50% />

会话设置

<img src="./screenshots/13_conversation_settings.png" width = 50% height = 50% />

朋友圈

<img src="./screenshots/14_moments.png" width = 50% height = 50% />

新好友

<img src="./screenshots/15_new_friends.png" width = 50% height = 50% />

多人视频通话

<img src="./screenshots/16_videocall.png" width = 50% height = 50% />

会议主页

<img src="./screenshots/17_conference_home.png" width = 50% height = 50% />

会议详情

<img src="./screenshots/18_conference_info.png" width = 50% height = 50% />

会议界面

<img src="./screenshots/19_conference.png" width = 50% height = 50% />

PC客户端界面

<img src="./screenshots/20_pc.png"/>

移动客户端、PC客户端和Web客户端三端同框

<img src="./screenshots/21_three_platform.png" />

小程序客户端

<img src="./screenshots/22_micro_app.jpeg" width = 50% height = 50% />

公众号管理后台

<img src="./screenshots/23_channel.png"/>

开放平台管理后台

<img src="./screenshots/24_open_platform.png" />

IM服务管理后台

<img src="./screenshots/25_im_admin.png" />

> 更多详细信息请下载demo进行体验。

## 特别感谢
1. [moquette](https://github.com/moquette-io/moquette) 本项目是基于此项目二次开发而来,处理MQTT相关业务。
2. [loServer](https://github.com/looly/loServer) 本项目使用loServer处理HTTP相关业务。

*** 对他们表示诚挚的感谢🙏 ***

## License

1. Under the Creative Commons Attribution-NoDerivs 3.0 Unported license. See the [LICENSE](https://github.com/wildfirechat/server/blob/wildfirechat/LICENSE) file for details.


================================================
FILE: broker/config/hazelcast.xml
================================================

<!--    # 本配置文件为debug使用,修改这里不会在Release包中生效。Release中包含的配置文件在 ${Porject_Path}/distribution/src/main/resources目录下-->


<hazelcast
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.hazelcast.com/schema/config
  http://www.hazelcast.com/schema/config/hazelcast-config-3.5.xsd"
    xmlns="http://www.hazelcast.com/schema/config">
    <network>
        <join>
            <multicast enabled="false"/>
        </join>
    </network>

    <properties>
        <property name="hazelcast.logging.type">slf4j</property>
    </properties>

    <!-- map eviction -->
    <!-- http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Data_Structures/Map/Map_Eviction.html -->
    <map name="messages_map">
        <!-- 7 days -->
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.MessageLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <map name="groups_map">
        <!-- 7 days -->
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.GroupLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <map name="users">
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.UserLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <map name="user_status">
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.UserStatusLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <map name="user_friends_empty">
        <time-to-live-seconds>86400</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
    </map>



    <set name="node_ids"/>

    <multimap name="user_setting">
    </multimap>

    <multimap name="group_members">
    </multimap>

    <map name="chatrooms">
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.ChatroomLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <map name="user_chatroom">
    </map>

    <multimap name="chatroom_black">
    </multimap>

    <multimap name="chatroom_manager">
    </multimap>

    <map name="robots">
        <!-- 7 days -->
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.RobotLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>
    
    <map name="devices">
        <!-- 7 days -->
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.DeviceLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <multimap name="user_robots">
    </multimap>

    <multimap name="user_devices">
    </multimap>

    <multimap name="chatroom_members">
    </multimap>

    <multimap name="user_friends">
    </multimap>

    <multimap name="user_friends_request">
    </multimap>

    <map name="channels_map">
        <!-- 7 days -->
        <time-to-live-seconds>604800</time-to-live-seconds>
        <eviction-policy>LRU</eviction-policy>
        <max-size policy="PER_NODE">1000000</max-size>
        <eviction-percentage>10</eviction-percentage>
        <map-store enabled="true">
            <class-name>io.moquette.persistence.ChannelLoader</class-name>
            <write-delay-seconds>0</write-delay-seconds>
        </map-store>
    </map>

    <multimap name="channel_listeners">
    </multimap>
</hazelcast>


================================================
FILE: broker/config/wildfirechat.conf
================================================
#
#
# 本配置文件为debug使用,修改这里不会在Release包中生效。Release中包含的配置文件在 ${Porject_Path}/distribution/src/main/resources目录下
#
#



#*********************************************************************
# Server configuration
#*********************************************************************
#服务器的接入IP。给客户端提供是${server.ip}和${http_port}。
#客户端会从${http_port}端口获取到长链接端口。这个地址一定要改成客户端可以访问到的IP地址
#(如果您部署云服务器上或者具有独立公网出口的服务器上,请改为对应的公网IP;如果您部署在在内网环境下,在内网使用,这个地方改成内网地址)
server.ip 192.168.1.81

##原生客户端长链接端口
port 1883

##客户端短链接端口,客户端固定使用80端口,不要修改此端口。
http_port 80

#管理端口
http.admin.port 18080

##节点ID,当集群部署时,一定不能有重复。
node_id 1

##绑定IP,不要打开,除非有特殊需求才可以打开
#host 0.0.0.0

##本地绑定端口
local_port 80

## 是否使用内置DB。0使用mysql;1使用h2db。
## MySQL需要把事物隔离级别改成"Read committed",使用命令来修改"set global transaction_isolation='read-committed';",其他数据库默认已经是这个级别不用修改
embed.db 1

## 是否自动清理历史消息记录,当为true时,IM服务会定时扫描t_messages_x和t_user_messages_x表,清除掉3年前的历史消息。
## 如果不开启自动清理,需要手动清理t_messages_x和t_user_messages_x表内的历史数据,保存数据不能超过3年。
## 如果需要消息保存更长时间,可以把临近销毁的消息转储到别的数据库,客户端在拉取不到服务器消息时,再去转储的数据库拉取。
## 使用mongodb时次开关无效(因为mongodb设置了消息过期时间,会自动清理,仅专业版支持mongodb)。
db.auto_clean_history_messages true

## h2db数据库的路径,默认为程序目录下的,可以指定其他目录。如果使用MySQL,可以忽略此配置
h2db.path ./h2db/wfchat

##服务器管理接口密钥。如果修改此端口需要同步修改使用管理API的地方,比如应用服务。
http.admin.secret_key 123456

##服务器API接口参数是否检查时间。当设置为false时,所有的请求会检查时间的有效性;当设置为true时,可以在http.admin.secret_key保持不变的情况下,使用固定的服务API签名
##nonce = "76616", timestamp = "1558350862502", sign = "b98f9b0717f59febccf1440067a7f50d9b31bdde"
##这个地方上线前要改为false
http.admin.no_check_time true

##用来生产im token的私钥,只在服务器使用,客户端不用。正式使用时为了安全一定要修改这个值,切记切记
token.key testim

##token的过期时间,单位为毫秒,默认为无限期。如果需要设置无限期,客户端上一定需要加上token过期的处理。token过期的处理请参考文档的常见问题
##token.expire_time 2592000000

##客户端(目前只有android)的应用签名(一个应用最取第一个签名),如果有多个签名(多个客户端),用英文逗号分开。获取签名方法请参考文档:https://docs.wildfirechat.cn/blogs/签名验证.html
#connect.client_signature_list eNkezQ1g9OsnhfLSFUY1vzKDzhs=,xykezQ1g9OsnhfLSFUY1vzKDzhs=

##是否拒绝空签名的android客户端, 默认为true。当有旧的客户端需要兼容时改成false,当所有都是新客户端时,改成true。
#connect.reject_empty_signature true

##是否使用AES256加密。默认客户端和服务器都是AES128加密,如果需要开启AES256,需要客户端和IM服务同时开通。
#encrypt.use_aes256 true

##当创建一个对象时(用户,群组,频道,机器人等),如果没有传入ID,野火会为这个对象生成一个ID。如果id.use_uuid为true,会使用uuid作为对象ID,否则会使用野火短ID,默认为false。
## 短ID有个很大的风险是容易被人穷举进行攻击。建议用UUID。
id.use_uuid true

##首次登录,是否接收之前的历史消息。
##0 不接收历史消息,只接收${message.compensate_time_limit}毫秒以内的消息,由于服务器没有保存已经收取记录,所以如果有超过${message.compensate_time_limit}毫秒之前未收取的消息也不会收取下拉;
##1接收,会接收 message.max_queue 配置的条数的历史消息
message.roaming 0

## 消息补偿时限,当${message.roaming}为0时,会同步时限以内且小于${message.max_queue}的消息,默认时限为5分钟。当${message.roaming}为1时,会接收 message.max_queue 配置的条数的历史消息。
message.compensate_time_limit 300000

##是否开启拉取远程历史消息。如果为1,客户端在会话内如果本地消息读取完了,可以下拉继续加载在服务器上的该会话的消息;如果为0则不能。
message.remote_history_message 0

##服务器为每个用户缓存的消息数量。这个值改得太大,拉取消息时间变长,另外会占用大量内存。
message.max_queue 1024

##是否开启拉取聊天室远程历史消息。如果为1,可以下拉继续加载在服务器上的该聊天室的消息;如果为0则不能。默认为1
message.chatroom_remote_history_message 1

##是否禁止陌生人聊天
message.disable_stranger_chat false

##当禁止陌生人聊天时,允许聊天的用户id,比如管理员或者文件传输助手等。用户id以英文逗号分割。
message.allow_stranger_chat_list admin,FireRobot,wfc_file_transfer

##当禁止陌生人聊天时,允许聊天的线路。
#message.allow_stranger_line 100,101

##黑名单策略,0 发送失败,返回被拉黑的错误码;1 发送成功但消息被服务器直接丢弃
message.blacklist.strategy 0

##拉黑对方后,对方不能发送消息给你。这个开关确定拉黑对方后你还能不能给对方发送消息。
message.blacklist.allow_send_to_black false

##是否禁止服务器端消息搜索,该功能暂未实现。目前的影响是如果打开,则存储消息时不单独保存_searchable_content字段
message.disable_remote_search  false

##是否数据库中加密消息内容。注意这个开关在服务运行起来后不能改变了,避免读取数据库时无法恢复历史消息。
##如果要避免数据库中明文存储消息内容,请打开这个开关和message.disable_remote_search开关
message.encrypt_message_content false

##允许客户端撤回用户自己发送的消息时限,单位是秒。0是不允许撤回;-1是无限制撤回。
##Server API不受此限制,可以撤回任意时限内的消息
##群组管理员或群主撤回群成员消息不受此限制,可以撤回任意时限内的消息。但管理员或群主撤回自己的消息还是需要准守此时间限制。
##修改此参数需要同步修改客户端UI,客户端UI代码有判断撤回是否显示的逻辑。
message.recall_time_limit 120

##禁止群主/群管理员撤回群内消息,关闭时群主/群管理员可以撤回任意时间段内群内成员的消息。
message.disable_group_manager_recall false

##禁止客户端发送消息类型,消息类型以逗号分开,下面3个值为示例,可以删除。
##一般用于重要类型消息,比如交易、充值等,禁止客户端发送,仅限于服务器发送,提高安全性。
#message.forbidden_client_send_types 3999,4000,4001

## 当禁止发送消息时,允许例外发送的消息。这种一般用户需要被动回应的消息。比如群中被禁言的用户,他无法主动发起音视频,但可以接听未被禁言用户的音视频
## 因为音视频使用了消息作为信令,所以就需要允许发送音视频信令。如果开发了其它场景也需要被动回应消息,可以加在这里。
## 黑名单时允许发送的消息类型
message.blacklist_exception_types 401,402,403,404,405,407,408,410,411
## 群禁言或者聊天室或者频道禁言时允许发送的消息类型
message.group_mute_exception_types 401,402,403,404,405,407,408,410,411
## 用户被全局禁言时允许发送的消息类型
message.global_mute_exception_types 401,402,403,404,405,407,408,410,411

## 离线用户推送过期天数,0是永不过期,建议配置为7天。
message.push_expired_days 7

## 当会话静音/全局静音/PC在线静音时,普通消息都不会有推送,如果有某些消息类型需要此时保持推送,可以配置到这里。此配置对消息免打扰时段无效。
## 此配置只影响远程推送,需要客户端处理客户端在线且在后台收到此消息的处理,需要针对这些消息类型加上本地通知。
## 强制推送消息的MessagePayload中pushContent和pushData至少要存在一个才可以推送。
## 消息类型以英文逗号分割。
#message.force_push_types 401,402

## 群发消息(包括server api群发和全局频道群发)时,目标用户是否来自于t_user表。如果使用野火托管用户信息,请设置为true,否则设置为false。
message.broadcast.target_from_user_table true

## 消息转发功能开启时,开关是否不转发server api接口消息。
## 当为true时,不转发server api发送的消息;当为false时,转发server api发送的消息。
message.no_forward_admin_message false

## 消息转发功能开启时,转发信息是否带上用户clientId和平台类型。
message.forward_with_client_info false

## 消息转发功能开启时,转发信息是否带上发送者的用户信息
message.forward_with_sender_info false

## 消息转发功能开启时,转发信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息
message.forward_with_target_info false

## 允许发送单聊消息给被封禁用户
message.allow_send_to_forbidden_user false

## 机器人回调信息是否带上用户clientId和平台类型。
robot.callback_with_client_info false

## 机器人回调信息是否带上发送者的用户信息
robot.callback_with_sender_info false

## 机器人回调信息是否带上目标的信息,单聊时是对方用户信息,群聊时是群组信息,频道时是频道信息
robot.callback_with_target_info false

## 是否允许@会话外的机器人。如果为true,单聊或者群聊时,可以@不在会话中的机器人。当机器人收到消息后,可以回复消息。
## 如果为false,不能@不在会话中的机器人。机器人不在会话中时,也不能回复消息。
robot.mention_external_robot true

## 机器人获取信息允许的字段,可以获取userId/displayName/portrait,其他需要这里配置允许。
## 第一位(1)是name, 第二位(2)是mobile,第三(4)位是email,第四位(8)是address,第五位(16)是company,第六位(32)是extra,
## 第七位(64)是updateDt,第八位(128)是gender,第九位(256)是social,第十位(512)是type。
## 比如允许获取name和email就是5(1+4),允许获取name和mobile和company和type就是531(1+2+16+512),允许全部是1023(1+2+...+512)
#robot.get_user_info_mask 1023

## 频道回调信息是否带上用户clientId和平台类型。
channel.callback_with_client_info false

## 频道回调信息是否带上发送者的用户信息。
channel.callback_with_sender_info false

## 频道回调信息是否带上频道信息
channel.callback_with_target_info false

## 频道回调新方式,在新方式下,如果有callback地址就会总是回调客户端发送的消息(包括owner和订阅者)。automatic属性控制订阅者发送的消息是否发给owner, 0发,1不发。
## 旧的方式是,automatic为0时,订阅者的消息发给owner,不转发消息到callback地址。为1时,把订阅者的消息转发给callback地址,不发给owner。
channel.new_callback_feature true

##禁止搜索用户
friend.disable_search false

##禁止按照昵称搜索用户。
friend.disable_nick_name_search false

##禁止按照用户id搜索用户,默认为false。
friend.disable_user_id_search false

##禁止发送好友邀请,通过server api添加好友不受此限制(force参数需要为true)
friend.disable_friend_request false

##好友请求重复发送的间隔,单位是毫秒,默认是7天,0为无限长期限。
friend.repeat_request_duration 604800000

##好友请求被拒绝后再次发送的间隔,单位是毫秒,默认是30天,0为不限制。不能小于friend.repeat_request_duration。
friend.reject_request_duration 2592000000

##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
friend.request_expiration_duration 604800000

##好友请求限制频率,一个用户24小时之内允许请求好友的次数,默认不限频。
friend.request_rate_limit 30

##如果搜索电话号码,24小时内搜索错误号码几次就不再允许电话号码搜素。防止有人遍历搜索电话号码
friend.search_mobile_empty_rate_limit 5

##如果搜索用户,24小时内搜索次数。防止有人遍历用户名或者用户ID乱加好友。另外可以禁止ID搜索friend.disable_user_id_search
friend.search_rate_limit 100

##请求添加机器人为好友时,机器人是否自动接受,默认为true
friend.robot_auto_accept true

## 聊天室观众空闲退出时间,单位为毫秒,默认为15分钟,0为永远不退出
chatroom.participant_idle_time 900000

## 用户向聊天室发送消息,自动加入聊天室
chatroom.rejoin_when_active true

## 当一个聊天室不存在时,如果有用户加入就自动创建
chatroom.create_when_not_exist true

## 一个用户同一时刻只能加入一个聊天室。
## 当一个客户端加入一个聊天室时,如果这个客户端已经加入另外一个聊天室了,会自动退出之前的聊天室。
## 当一个客户端加入一个聊天室时,如果这个用户的其他端已经加入一个聊天室了,kickoff_other_platform为true时会自动退出之前的聊天室,为false时会返回225的错误码。
## 当自动退出聊天室时,客户端不会收到任何通知,只是不会再收到消息。
chatroom.kickoff_other_platform true

## 是否允许群主不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为true。
group.allow_owner_recall_self_msg true

## 是否允许群管理员不受限制地撤回自己发送的消息。false可以${message.recall_time_limit}撤回自己的消息;true可以撤回任意时间自己的消息。默认为false。
group.allow_manager_recall_self_msg false

## 是否允许客户端发送操作群的自定义群通知消息
group.allow_client_custom_operation_notification true

## 是否允许机器人发送操作群的自定义群通知消息
group.allow_robot_custom_operation_notification true

## 当群成员退出或者被移除时,是否同时给管理员和相关人员发送显式通知消息。
## 0 不发送,1 退群时发送,2 踢人时发送,3 退群和踢人时都发送。
group.visible_quit_or_kickoff_notification 0

## 禁止客户端群操作。第1位是禁止创建群组,第2位是禁止销毁群组,3位禁止加入群,4位禁止退出群,5位禁止邀请群成员,6位禁止移出群成员,7位禁止转移群,8位禁止设置群管理员,9位禁止白名单处理,10位禁止群禁言,11位禁止修改群组信息,12位禁止群成员禁言。
## Server API不受此限制。
#group.forbidden_client_operation 0xFFF

## 是否禁止陌生人拉人入群,默认为false
group.disable_stranger_invite false

## 创建群组或者加人时。可能会有成员加入失败(黑名单,或者不允许陌生人拉入群)。当出现有成员失败时,如果此开关为关,操作会失败。
## 如果此开关打开,操作会返回成功,另外在群里发送一条通知消息 XXX 拒绝加入群组。默认为开。
group.add_member_allow_part_success true

## 群组信息是否标记删除
group.enable_mark_deletion true

## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开;
## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。
## 注意,修改本配置不会对已经同步的信息产生影响。
#user.hide_properties 3,4,5

## 销毁用户时,用户信息会被清空,deleted字段设置为1,这个开关控制是否保留用户昵称,默认为true。
user.keep_display_name_when_destroy true

## 销毁用户时deleted字段设置为1,这个开关控制是否保留其他信息,默认是false。
user.keep_full_info_when_destroy false

## 销毁用户时,如果user.keep_full_info_when_destroy为true,会保留所有信息,这个开关控制是否保留这个用户信息的电话号码,默认为false。
## 当保留所有信息且保留电话号码时,用户如果再注册会用到原来的UID,能够看到原来用户的消息,需要考虑一下是否让已删除用户再次注册登录看到之前的消息。
user.keep_mobile_when_destroy false

## 销毁用户时是否保留归属于这个用户的所有消息记录,默认为false。
user.keep_messages_when_destroy false

# 好友/好友请求/用户设置 这三类数据同步的最大条目数。之前是客户第一次登录时,会把所有的对应数据一次下载到客户端,但如果有特别多的信息,会导致无法同步到客户端,
# 因此需要分段多次同步,此开关定义了每次同步的数据的条数。此需要客户端支持,客户端SDK在2021.5.25日后支持此功能。如果确认所有客户端都在这个日志之后才可以打开此设置。
#sync.data_part_size 1000

## 是否关闭api/version接口。api/version方法可以用来检查IM服务版本,上线确认无问题后,可以关掉这个接口。
#http.close_api_version false

#*********************************************************************
# 限频配置
#*********************************************************************
##API接口限频设置,时间是10秒内允许的请求次数。
##管理api频率限制,默认是10秒10000次。
http.admin.rate_limit 10000
##机器人api频率限制,默认是10秒1000次,按照机器人ID区分。
http.robot.rate_limit 1000
##频道api频率限制,默认是10秒1000次,按照频道ID区分。
http.channel.rate_limit 1000

##客户端请求频率限制,默认是5秒100次。通常情况下不要修改这个值。
client.request_rate_limit 100

#*********************************************************************
# Media server configuration
#*********************************************************************
##是否使用七牛云存储。1使用七牛;0使用内存文件服务器。默认的七牛账户信息不可用,请在七牛官网申请账户并配置
##专业版另外支持阿里云存储和野火私有存储,关于野火私有存储请参考:https://github.com/wildfirechat/WF-minio
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
media.server.use_qiniu 0

# qiniu media server configuration
qiniu.server_url  http://up.qbox.me
qiniu.access_key tU3vdBK5BL5j4N7jI5N5uZgq_HQDo170w5C9Amnn
qiniu.secret_key YfQIJdgp5YGhwEw14vGpaD2HJZsuJldWtqens7i5
qiniu.bucket_general_name media
qiniu.bucket_general_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_image_name media
qiniu.bucket_image_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_voice_name media
qiniu.bucket_voice_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_video_name media
qiniu.bucket_video_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_file_name media
qiniu.bucket_file_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_sticker_name media
qiniu.bucket_sticker_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_moments_name media
qiniu.bucket_moments_domain http://pghnpyzos.bkt.clouddn.com
qiniu.bucket_portrait_name storage
qiniu.bucket_portrait_domain http://cdn2.wildfirechat.cn
qiniu.bucket_favorite_name storage
qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
## custom的桶是给客户预留的,客户可以上传自己的文件到这3个桶中,野火不会用到这几个桶。如果不需要,可以忽略这几个配置
qiniu.bucket_custom1_name temp1
qiniu.bucket_custom1_domain http://temp1.wildfirechat.cn
qiniu.bucket_custom2_name temp2
qiniu.bucket_custom2_domain http://temp2.wildfirechat.cn
qiniu.bucket_custom3_name temp3
qiniu.bucket_custom3_domain http://temp3.wildfirechat.cn
qiniu.bucket_pan_name pan
qiniu.bucket_pan_domain http://pan.wildfirechat.cn

##媒体类型分类
#Media_Type_GENERAL = 0,
#Media_Type_IMAGE = 1,
#Media_Type_VOICE = 2,
#Media_Type_VIDEO = 3,
#Media_Type_FILE = 4,
#Media_Type_PORTRAIT = 5,
#Media_Type_FAVORITE = 6,
#Media_Type_STICKER = 7,
#Media_Type_MOMENTS = 8

# local media server configuration
# 本地媒体服务器配置。
local.media.storage.root media
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。fs目录下按照类型存放文件,媒体类型见上面注释,比如5就是Media_Type_PORTRAIT,是客户端的头像文件。
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
# local.media.storage.remote_server_url https://example.com/media

# 是否支持任意多端登陆,为true时支持任意平台任意多个客户端同时登录;为false时每个平台只支持一个端登录,但不同平台可以同时登录。
# Android/iOS为移动平台,windows/mac/linux为pc平台,web为web平台,小程序为小程序平台。
# 建议使用false
server.multi_endpoint false

## 是否支持PC多端登陆,当server.multi_endpoint为true时,此开关无意义,当为false时,可以单独打开PC端多端登录。
server.multi_pc_endpoint false

## 是否支持PAD多端登陆,当server.multi_endpoint为true时,此开关无意义,当为false时,可以单独打开PAD端多端登录。
server.multi_pad_endpoint false

## 是否支持可穿戴设备多端登陆,当server.multi_endpoint为true时,此开关无意义,当为false时,可以单独打开可穿戴设备多端登录。
server.multi_wearable_endpoint false

## 是否支持TV设备多端登陆,当server.multi_endpoint为true时,此开关无意义,当为false时,可以单独打开TV多端登录。
server.multi_tv_endpoint false

# 多平台连接状态通知(仅当multi_endpoint为false时有效),true时移动端可以收到pc或pad或web端登录的通知。
server.multi_platform_notification true

# 当pc或者web在线时,手机是否默认静音,默认为true。注意仅影响默认值,用户可以手动切换是否静音。
# 如果这里改为false,客户端那边需要同步修改pc在线默认通知状态,方法是client的setDefaultSilentWhenPcOnline函数。
server.mobile_default_silent_when_pc_online true

## 客户端是否支持kickoff事件。当客户端被其他端登录踢出时,如果此开关为false时,客户端协议栈上报secret_mismatch。如果此开关为ture时,客户端协议栈上报kicked_off。
## 客户端被踢时上报kicked_off是在2021.9.15之后才加上的。如果客户端协议栈全部为此日期之后的版本才可以打开此开关。
server.client_support_kickoff_event true

#*********************************************************************
# Push server configuration
#*********************************************************************
##推送服务项目地址:https://github.com/wildfirechat/push_server。
##安卓推送服务器地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
push.android.server.address http://localhost:8085/android/push

##苹果推送服务器地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
push.ios.server.address http://localhost:8085/ios/push

##鸿蒙推送服务器地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
push.harmony.server.address http://localhost:8085/harmony/push

#*********************************************************************
# 监控配置
#*********************************************************************
##异常事件产生回调
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#monitor.exception_event_address http://localhost:8888/im_exception_event/

#*********************************************************************
# 各种事件回调
#*********************************************************************
##用户在线状态事件回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#user.online_status_callback http://localhost:8888/im_event/user/online

##用户信息变动事件回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#relation.relation_update_callback http://localhost:8888/im_event/user/relation

##用户信息变动事件回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#user.user_info_update_callback http://localhost:8888/im_event/user/info

##消息转发地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#message.forward.url http://localhost:8888/im_event/message
##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。如果转发所有消息,请注释掉配置或者设置为空
#message.forward.types 1,2,3,5-10
##需要转发的消息类型,当有多个时以英文逗号分割,可以用-来指定区间,注意区间不能太大,因为要把区间内的所有数字都放入到Set中。
#message.forward.exclude_types 1,2,3,5-10

##敏感消息转发地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#message.sensitive.forward.url http://localhost:8888/im_event/message

##提醒消息转发地址,@全体用户和@某个用户消息会回调此地址。
##此转发不受${message.forward.types}和${message.forward.exclude_types}限制。
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#message.mentionmsg.forward.url http://localhost:8888/im_event/message

##撤回消息转发地址,当用户撤回消息会回调此地址。
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#message.recallmsg.forward.url http://localhost:8888/im_event/recall_message

##设备信息转发地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#things_message.forward.url http://localhost:8888/im_event/things/message

##群组信息变动事件回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#group.group_info_update_callback http://localhost:8888/im_event/group/info

##群组信息变动事件回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#group.group_member_update_callback http://localhost:8888/im_event/group/member

##频道信息变动回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#channel.channel_info_update_callback http://localhost:8888/im_event/channel/info

##聊天室信息变动回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#chatroom.chatroom_info_update_callback http://localhost:8888/im_event/chatroom/info

##聊天室成员变动回调地址
##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
#chatroom.chatroom_member_update_callback http://localhost:8888/im_event/chatroom/member

#*********************************************************************
# Sensitive configuration
#*********************************************************************
## 内置文本敏感词过滤处理方法,当命中敏感词后,消息会被记录到t_sensitive_messages表中,然后根据type类型做不同的处理,处理方式如下:
## 0 发送失败;1 发送成功但消息被服务器直接丢弃;2 命中的敏感词被替换成***然后正常发送;3 正常发送。
## 如果开启 message.sensitive.forward.url 配置,命中敏感词的消息还会被回调到这个地址
sensitive.filter.type 2

## 敏感词是否只处理消息。如果为true,只过滤消息;如果为false,会同时过滤用户昵称、群组名和群昵称。
## 除了消息之外的信息只支持内部敏感词处理,不支持外置审核。
sensitive.only_message false

## 敏感词添加或者删除有2种方式,一种是通过Server API进行,这种方式会立即生效。另外一种方法是修改数据库,直接中数据库的t_sensitive_word表中处理
## 修改数据库的方法不会立即生效,IM服务会2个小时重新加载一次敏感词。所以如果直接修改敏感词表,需要等2个小时,或者重启才能生效。

## 如果内置敏感词库无法满足您的需求,可以开发部署独立敏感词审核服务。配置如下地址和消息类型,IM服务会把指定消息类型的消息回调到指定地址,内置的敏感词审核和敏感词转发功能就不再起作用了。
## 审核服务返回状态码200表示继续发送,如果需要替换内容,返回状态码200并且内容为替换后的内容。返回403表示不允许发送。其它错误继续发送。
## 独立审核服务地址,IM服务会post SendMessageData。如果需要修改消息内容,返回 MessagePayload。请参考应用服务中 "/message/censor" Mapping.
#sensitive.remote_server_url http://192.168.3.202:8888/message/censor
## 需要进行敏感词审核的消息类型,当有多个时以英文逗号分割
#sensitive.remote_sensitive_message_type 1,2,3
## 如果远程审核服务返回403,返回给发送端发送失败还是成功?实际上这个值影响发送响应是否等待审核结果,当为false时,消息发送给审核服务就立即返回成功给客户端。
## 当为true时,消息发送给审核服务,等待审核结果,如果结果为继续发送就返回给客户端为成功,结果为禁止发送就返回失败给客户端。
## 客户端操作的超时一般为10s左右,且考虑到复杂的网络情况,建议处理时间不要超过3s。建议这个值为false。
#sensitive.remote_fail_when_matched false


================================================
FILE: broker/migrate/h2/V10__create_default_admin.sql
================================================

insert into t_user (`_uid`,`_name`,`_display_name`,`_type`,`_dt`) values ('admin','admin','系统管理员',3,1);



================================================
FILE: broker/migrate/h2/V11__alter_device_token.sql
================================================
ALTER TABLE t_user_session MODIFY _token VARCHAR(240) DEFAULT NULL;


================================================
FILE: broker/migrate/h2/V12__add_group_control_columns.sql
================================================
alter table `t_group` add column `_mute` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_join_type` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_private_chat` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_searchable` tinyint NOT NULL DEFAULT 0;


================================================
FILE: broker/migrate/h2/V13__create_settings_table.sql
================================================

DROP TABLE IF EXISTS `t_settings`;
CREATE TABLE `t_settings` (
  `id` int(11) NOT NULL PRIMARY KEY,
  `value` varchar(64) NOT NULL,
  `desc` varchar(128) NOT NULL
);


insert into t_settings(`id`, `value`,`desc`) values (1, '3000', '最大群成员数量');


================================================
FILE: broker/migrate/h2/V14__add_id_for_sensitive_word.sql
================================================
alter table `t_sensitiveword` add column `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT;


================================================
FILE: broker/migrate/h2/V15__alter_voip_token_length.sql
================================================
alter table `t_user_session` modify column `_voip_token` varchar(240) DEFAULT '';




================================================
FILE: broker/migrate/h2/V16__add_friend_blocked.sql
================================================
alter table t_friend add column `_blacked` tinyint DEFAULT 0;
update t_friend set `_blacked` = 1 where `_state` = 2;


================================================
FILE: broker/migrate/h2/V17__add_user_session_token_index.sql
================================================
alter table `t_user_session` ADD INDEX `session_token_index` ( `_token` );


================================================
FILE: broker/migrate/h2/V18__add_friend_request_index.sql
================================================
alter table t_friend_request add index `friend_request_uid_index` (`_friend_uid`);


================================================
FILE: broker/migrate/h2/V19__add_user_session_uid_index.sql
================================================
alter table `t_user_session` ADD INDEX `session_uid_index` ( `_uid` );


================================================
FILE: broker/migrate/h2/V1__baseline.sql
================================================


================================================
FILE: broker/migrate/h2/V20__user_session_add_deleted.sql
================================================
alter table `t_user_session` add column `_deleted` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/h2/V21__user_add_deleted.sql
================================================
alter table `t_user` add column `_deleted` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/h2/V22__refactor_channel_status.sql
================================================
update t_channel set `_status` = 64 where `_status` = 3;


================================================
FILE: broker/migrate/h2/V23__alter_message_add_to_column.sql
================================================
alter table t_messages add column `_to` varchar(64) DEFAULT NULL;



================================================
FILE: broker/migrate/h2/V24__add_friend_extra.sql
================================================
alter table t_friend add column `_extra` TEXT DEFAULT NULL;


================================================
FILE: broker/migrate/h2/V25__create_chatroom_blacklist_manager.sql
================================================

DROP TABLE IF EXISTS `t_chatroom_blacklist`;
CREATE TABLE `t_chatroom_blacklist` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_state` tinyint NOT NULL DEFAULT 0,
  `_expired_time` bigint(20) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `cr_bl_uid_index` (`_cid`,_uid)
);

DROP TABLE IF EXISTS `t_chatroom_manager`;
CREATE TABLE `t_chatroom_manager` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_state` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `cr_man_uid_index` (`_cid`,_uid)
);



================================================
FILE: broker/migrate/h2/V26__add_user_messages_line.sql
================================================
alter table `t_user_messages` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages` ADD INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );


================================================
FILE: broker/migrate/h2/V27__create_device_table.sql
================================================

DROP TABLE IF EXISTS `t_thing`;

DROP TABLE IF EXISTS `t_device`;
CREATE TABLE `t_device` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_token` varchar(64) DEFAULT '',
  `_state` tinyint DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `device_uid_index` (`_uid` ASC)
);

DROP TABLE IF EXISTS `t_user_device`;
CREATE TABLE `t_user_device` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_did` varchar(64) DEFAULT '',
  INDEX `user_device_uid_index` (`_uid` ASC),
  INDEX `user_device_did_index` (`_did` ASC)
);


================================================
FILE: broker/migrate/h2/V28__add_session_user_type.sql
================================================
alter table t_user_session add column `_user_type` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/h2/V29__create_receipt_table.sql
================================================

DROP TABLE IF EXISTS `t_read_report`;
CREATE TABLE `t_read_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NULL,
  `_type` tinyint NULL,
  `_line` int(11) NULL,
  `_target` varchar(64) NULL,
  `_dt` bigint(20) NOT NULL DEFAULT 0,
  INDEX `read_report_index` (`_uid`, `_type`, `_line`, `_target`)
);

DROP TABLE IF EXISTS `t_user_read_report`;
CREATE TABLE `t_user_read_report` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_rid` int(11) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `user_read_report_index` (`_uid` DESC, `_seq` DESC),
    UNIQUE INDEX `user_read_report_index2` (`_uid` DESC, `_rid` DESC)
);

DROP TABLE IF EXISTS `t_delivery_report`;
CREATE TABLE `t_delivery_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `delivery_index` (`_uid`)
);


DROP TABLE IF EXISTS `t_user_delivery_report`;
CREATE TABLE `t_user_delivery_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_rid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_seq` bigint(20) NOT NULL,
  `_dt` DATETIME NOT NULL DEFAULT NOW(),
  INDEX `user_delivery_index` (`_uid` DESC, `_seq` DESC),
  UNIQUE INDEX `user_delivery_index2` (`_uid` DESC, `_rid` DESC)
);


================================================
FILE: broker/migrate/h2/V2__create_table.sql
================================================


DROP TABLE IF EXISTS `t_group`;
CREATE TABLE `t_group` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_gid` varchar(64) NOT NULL,
  `_name` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_owner` varchar(64) DEFAULT '',
  `_type` tinyint NOT NULL DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  `_member_count` int(11) DEFAULT 0,
  `_member_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `group_gid_index` (`_gid` ASC),
  INDEX `group_name_index` (`_name` ASC)
);

DROP TABLE IF EXISTS `t_group_member`;
CREATE TABLE `t_group_member` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_gid` varchar(64) NOT NULL,
  `_mid` varchar(64) DEFAULT '',
  `_alias` varchar(64) DEFAULT '',
  `_type` tinyint DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_gid_mid_index` (`_gid`, `_mid`)
);

DROP TABLE IF EXISTS `t_user`;
  CREATE TABLE `t_user` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_uid` varchar(64) NOT NULL,
    `_name` varchar(64) DEFAULT '',
    `_display_name` varchar(64) DEFAULT '',
    `_gender` int(11) NOT NULL DEFAULT 0,
    `_portrait` varchar(1024) DEFAULT '',
    `_mobile` varchar(64) DEFAULT '',
    `_email` varchar(64) DEFAULT '',
    `_address` varchar(64) DEFAULT '',
    `_company` varchar(64) DEFAULT '',
    `_social` varchar(64) DEFAULT '',
    `_passwd_md5` varchar(64) DEFAULT '',
    `_salt` varchar(64) DEFAULT '',
    `_extra` TEXT DEFAULT NULL,
    `_type` tinyint DEFAULT 0,
    `_dt` bigint(20) NOT NULL,
    UNIQUE INDEX `user_uid_index` (`_uid` ASC),
    UNIQUE INDEX `user_name_index` (`_name` ASC),
    INDEX `user_display_name_index` (`_display_name` ASC),
    INDEX `user_mobile_index` (`_mobile` ASC),
    INDEX `user_email_index` (`_email` ASC)
  );

DROP TABLE IF EXISTS `t_user_status`;
CREATE TABLE `t_user_status` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_status` int(11) NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_status_uid_index` (`_uid` ASC),
);

DROP TABLE IF EXISTS `t_friend_request`;
CREATE TABLE `t_friend_request` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_friend_uid` varchar(64) NOT NULL,
  `_reason` TEXT DEFAULT NULL,
  `_status` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  `_from_read_status` tinyint DEFAULT 0,
  `_to_read_status` tinyint DEFAULT 0,
  UNIQUE INDEX `fr_user_target_index` (`_uid` ASC, `_friend_uid` ASC)
);

DROP TABLE IF EXISTS `t_friend`;
CREATE TABLE `t_friend` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_friend_uid` varchar(64) NOT NULL,
  `_state` tinyint DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `f_user_target_index` (`_uid` ASC, `_friend_uid` ASC)
);

DROP TABLE IF EXISTS `t_user_setting`;
CREATE TABLE `t_user_setting` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_scope` int NOT NULL,
  `_key` varchar(64) NOT NULL,
  `_value` varchar(4096) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_setting_index` (`_uid` ASC, `_scope` ASC, `_key` ASC)
);

DROP TABLE IF EXISTS `t_id_generator`;
CREATE TABLE `t_id_generator` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
)
AUTO_INCREMENT = 3;


DROP TABLE IF EXISTS `t_channel`;
CREATE TABLE `t_channel` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_name` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_owner` varchar(64) DEFAULT '',
  `_status` tinyint NOT NULL DEFAULT 0,
  `_desc` TEXT DEFAULT NULL,
  `_secret` varchar(64) DEFAULT '',
  `_callback` varchar(1024) DEFAULT '',
  `_automatic` tinyint NOT NULL DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `channel_cid_index` (`_cid` DESC),
  INDEX `channel_name_index` (`_name` DESC)
);

DROP TABLE IF EXISTS `t_channel_listener`;
CREATE TABLE `t_channel_listener` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_mid` varchar(64) DEFAULT '',
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `channel_cid_mid_index` (`_cid`, `_mid`)
);


DROP TABLE IF EXISTS `t_user_session`;
CREATE TABLE `t_user_session` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_cid` varchar(64) NOT NULL,
  `_token` varchar(64) DEFAULT '',
  `_voip_token` varchar(64) DEFAULT '',
  `_secret` varchar(64) NOT NULL,
  `_db_secret` varchar(64) NOT NULL,
  `_platform` tinyint DEFAULT 0,
  `_push_type` tinyint DEFAULT 0,
  `_package_name` varchar(64) DEFAULT '',
  `_device_name` varchar(64) DEFAULT '',
  `_device_version` varchar(64) DEFAULT '',
  `_phone_name` varchar(64) DEFAULT '',
  `_language` varchar(64) DEFAULT '',
  `_carrier_name` varchar(64) DEFAULT '',
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `session_uid_cid_index` (`_cid`, `_uid`)
);


DROP TABLE IF EXISTS `t_robot`;
CREATE TABLE `t_robot` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_owner` varchar(64) DEFAULT '',
  `_secret` varchar(64) DEFAULT '',
  `_callback` varchar(1024) DEFAULT '',
  `_state` tinyint DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `robot_uid_index` (`_uid` ASC),
  INDEX `robot_owner_index` (`_owner` ASC)
);


DROP TABLE IF EXISTS `t_thing`;
CREATE TABLE `t_thing` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_owner` varchar(64) DEFAULT '',
  `_token` varchar(64) DEFAULT '',
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `thing_uid_index` (`_uid` ASC),
  INDEX `thing_owner_index` (`_owner` ASC)
);


DROP TABLE IF EXISTS `t_chatroom`;
CREATE TABLE `t_chatroom` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_title` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_state` tinyint NOT NULL DEFAULT 0,
  `_desc` TEXT DEFAULT NULL,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `chatroom_cid_index` (`_cid` DESC)
);

DROP TABLE IF EXISTS `t_sensitiveword`;
CREATE TABLE `t_sensitiveword` (
  `_word` TEXT DEFAULT NULL
);



================================================
FILE: broker/migrate/h2/V30__add_group_member_create_dt.sql
================================================
alter table t_group_member add column `_create_dt`  bigint(20) DEFAULT 0;


================================================
FILE: broker/migrate/h2/V31__add_group_member_count_history_message.sql
================================================
alter table `t_group` add column `_history_message` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_max_member_count` int(11) NOT NULL DEFAULT 2000;


================================================
FILE: broker/migrate/h2/V32__alter_setting_column_name.sql
================================================
alter table `t_settings` change column `value` `_value` varchar(64) NOT NULL;
alter table `t_settings` change column `desc` `_desc` varchar(64) NOT NULL;


================================================
FILE: broker/migrate/h2/V33__alter_group_searchable_column.sql
================================================
alter table `t_group` modify column `_searchable` int(11) NOT NULL DEFAULT 0;


================================================
FILE: broker/migrate/h2/V34__create_files_table.sql
================================================
DROP TABLE IF EXISTS `t_file`;
CREATE TABLE `t_file` (
  `_mid` bigint(20) NOT NULL PRIMARY KEY,
  `_from` varchar(64) NOT NULL,
  `_type` tinyint NOT NULL DEFAULT 0,
  `_target` varchar(64) NOT NULL,
  `_line` int(11) NOT NULL DEFAULT 0,
  `_name` varchar(128) DEFAULT '',
  `_url` varchar(1024) NOT NULL DEFAULT '',
  `_size` int(11) NOT NULL DEFAULT 0,
  `_download_count` int(11) DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  INDEX `file_conv_index` (`_type`, `_line`, `_target`, `_mid`),
  INDEX `file_user_index` (`_from`, `_mid`)
);


================================================
FILE: broker/migrate/h2/V35__create_file_transfer_user.sql
================================================

insert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('wfc_file_transfer','wfc_file_transfer','文件传输助手','https://static.wildfirechat.cn/wfc_file_transfer.png',1,1);
insert into t_robot (`_uid`,`_owner`,`_secret`,`_callback`,`_state`,`_dt`) values ('wfc_file_transfer', 'wfc_file_transfer', '', '', 0, 1);


================================================
FILE: broker/migrate/h2/V36__alter_channel_status_column.sql
================================================
alter table `t_channel` modify column `_status` int(11) NOT NULL DEFAULT 0;


================================================
FILE: broker/migrate/h2/V37__add_user_messages_mid_index.sql
================================================
alter table `t_user_messages` ADD INDEX `user_messages_mid_index` ( `_mid`);


================================================
FILE: broker/migrate/h2/V38__add_user_messages_conv_info.sql
================================================
alter table `t_user_messages` add column `_type` tinyint(4) NOT NULL DEFAULT '0';
alter table `t_user_messages` add column `_target` varchar(129) NOT NULL DEFAULT '';
alter table `t_user_messages` add column `_directing` tinyint(1) NOT NULL DEFAULT '0';
alter table `t_user_messages` add INDEX `user_messages_conv_index` ( `_uid`, `_type`, `_target`, `_line`, `_mid` desc);


================================================
FILE: broker/migrate/h2/V39__add_group_member_friend_request_extra.sql
================================================
alter table `t_group_member` add column `_extra` TEXT DEFAULT NULL;
alter table `t_friend_request` add column `_extra` TEXT DEFAULT NULL;


================================================
FILE: broker/migrate/h2/V3__create_sharding_table.sql
================================================

DROP TABLE IF EXISTS `t_messages`;
CREATE TABLE `t_messages` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_mid` bigint(20) NOT NULL,
  `_from` varchar(64) NOT NULL,
  `_type` tinyint NOT NULL DEFAULT 0,
  `_target` varchar(64) NOT NULL,
  `_line` int(11) NOT NULL DEFAULT 0,
  `_data` BLOB NOT NULL,
  `_searchable_key` TEXT DEFAULT NULL,
  `_dt` DATETIME NOT NULL DEFAULT NOW(),
  UNIQUE INDEX `message_uid_index` (`_mid` ASC)
);

DROP TABLE IF EXISTS `t_user_messages`;
CREATE TABLE `t_user_messages` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    UNIQUE INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
);


================================================
FILE: broker/migrate/h2/V40__add_user_messages_cont_type.sql
================================================
alter table `t_user_messages` add column `_cont_type` int(11) NOT NULL DEFAULT '0';


================================================
FILE: broker/migrate/h2/V41__alter_user_setting_key_column.sql
================================================
alter table `t_user_setting` modify column `_key` varchar(128) NOT NULL;


================================================
FILE: broker/migrate/h2/V42__create_secret_chat_table.sql
================================================

DROP TABLE IF EXISTS `t_secret_chat`;
CREATE TABLE `t_secret_chat` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_from` varchar(64) DEFAULT '',
  `_from_cid` varchar(64) DEFAULT '',
  `_to` varchar(64) DEFAULT '',
  `_to_cid` varchar(64) DEFAULT '',
  `_state` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `secret_chat_uid_index` (`_uid` DESC)
);


================================================
FILE: broker/migrate/h2/V43__add_message_table_conversation_index.sql
================================================
alter table `t_messages` add INDEX `messages_conv_index` ( `_type`, `_target`, `_line`);


================================================
FILE: broker/migrate/h2/V44__add_channel_listener_table_member_index.sql
================================================
alter table `t_channel_listener` add INDEX `channel_mid_index` ( `_mid`);


================================================
FILE: broker/migrate/h2/V45__add_channel_menu_column.sql
================================================
alter table `t_channel` add column `_menu` BLOB DEFAULT NULL;


================================================
FILE: broker/migrate/h2/V46__add_group_member_mid_index.sql
================================================
alter table `t_group_member` add INDEX `group_member_mid_index` (`_mid`);


================================================
FILE: broker/migrate/h2/V47__create_super_group.sql
================================================
alter table `t_group` add column `_super_group` tinyint NOT NULL DEFAULT 0;

DROP TABLE IF EXISTS `t_group_messages`;
CREATE TABLE `t_group_messages` (
    `_mid` bigint(20) NOT NULL PRIMARY KEY,
    `_sender` varchar(64) NOT NULL,
    `_gid` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL,
    `_client_id` varchar(64) NULL,
    `_seq` bigint(20) NOT NULL,
    `_persist_flag` int(11) NOT NULL,
    `_mentioned_type` int(11) NOT NULL,
    `_mentioned_targets` BLOB NULL,
    `_to` BLOB NULL,
    `_cont_type` int(11) NOT NULL DEFAULT 0,
    `_duration` int(11) NOT NULL DEFAULT 0,
    `_dt` bigint(20) NOT NULL DEFAULT 0,
    INDEX `group_message_seq_uid_index` (`_gid` DESC, `_line`, `_seq` DESC)
);


================================================
FILE: broker/migrate/h2/V48__group_add_deleted_column.sql
================================================
alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0;



================================================
FILE: broker/migrate/h2/V49__add_domain_table.sql
================================================
DROP TABLE IF EXISTS `t_domain`;
CREATE TABLE `t_domain` (
  `_domain_id` varchar(64) NOT NULL PRIMARY KEY,
  `_name` varchar(64) NOT NULL,
  `_desc` varchar(256) DEFAULT '',
  `_email` varchar(64) DEFAULT '',
  `_tel` varchar(64) DEFAULT '',
  `_address` varchar(64) DEFAULT '',
  `_extra` varchar(1024) DEFAULT '',
  `_dt` bigint(20) NOT NULL
);

alter table `t_user` add column `_external` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/h2/V4__create_default_chatroom.sql
================================================

insert into t_chatroom (`_cid`, `_title`, `_desc`,`_dt`) values ('chatroom1','火信聊天室1','火信测试聊天室1,用来演示聊天室功能', 1);

insert into t_chatroom (`_cid`, `_title`, `_desc`,`_dt`) values ('chatroom2','火信聊天室2','火信测试聊天室2,用来演示聊天室功能', 1);

insert into t_chatroom (`_cid`, `_title`, `_desc`,`_dt`) values ('chatroom3','火信聊天室3','火信测试聊天室3,用来演示聊天室功能', 1);


================================================
FILE: broker/migrate/h2/V50__update_group_member_index.sql
================================================
CREATE INDEX `user_gid_dt_index` ON `t_group_member` (`_gid`, `_dt`);


================================================
FILE: broker/migrate/h2/V51__add_not_allow_name_setting.sql
================================================
insert into t_settings(`id`, `_value`,`_desc`) values (2, '文件传输助手,客服,官方', '禁止使用名称,如果有多个,以英文逗号隔开。直接修改数据库,不用重启IM服务');


================================================
FILE: broker/migrate/h2/V52__modify_message_target.sql
================================================
alter table `t_messages` modify column `_target` varchar(129) NOT NULL;


================================================
FILE: broker/migrate/h2/V53__session_add_ip_column.sql
================================================
ALTER TABLE `t_user_session` ADD COLUMN `_ip` varchar(40) DEFAULT '';


================================================
FILE: broker/migrate/h2/V54__add_group_member_index.sql
================================================
CREATE INDEX `user_gid_type_index` ON `t_group_member` (`_gid`, `_type`);


================================================
FILE: broker/migrate/h2/V55__create_conference_table.sql
================================================

DROP TABLE IF EXISTS `t_conference`;
CREATE TABLE `t_conference` (
  `_id` varchar(64) NOT NULL PRIMARY KEY,
  `_des` varchar(64) NOT NULL,
  `_pin` varchar(16) NOT NULL,
  `_max_publishers` int(11) NOT NULL DEFAULT 0,
  `_bitrate` int(11) NOT NULL DEFAULT 0,
  `_advance` tinyint NOT NULL DEFAULT 0,
  `_recording` tinyint NOT NULL DEFAULT 0,
  `_create_dt` bigint(20) NOT NULL
);



================================================
FILE: broker/migrate/h2/V56__create_join_group_request_table.sql
================================================
DROP TABLE IF EXISTS `t_join_group_request`;
CREATE TABLE `t_join_group_request` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_gid` varchar(64) NOT NULL,
  `_mid` varchar(64) NOT NULL,
  `_request_uid` varchar(64) NOT NULL,
  `_accept_uid` varchar(64) DEFAULT NULL,
  `_reason` TEXT DEFAULT NULL,
  `_extra` TEXT DEFAULT NULL,
  `_status` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  `_read_status` tinyint DEFAULT 0,
  UNIQUE INDEX `join_group_request_key_index` (`_uid` DESC, `_gid` DESC, `_mid` DESC, `_request_uid` DESC),
  INDEX `join_group_request_gm_index` (`_gid` DESC, `_mid` DESC),
  INDEX `join_group_request_sync_index` (`_uid` DESC, `_dt` DESC)
);


================================================
FILE: broker/migrate/h2/V57__create_friend_index.sql
================================================
alter table t_friend add index `friend_uid_index` (`_friend_uid`);


================================================
FILE: broker/migrate/h2/V5__create_default_robot.sql
================================================

insert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('FireRobot','FireRobot','小火','http://cdn2.wildfirechat.cn/robot.png',1,1);

insert into t_robot (`_uid`,`_owner`,`_secret`,`_callback`,`_state`,`_dt`) values ('FireRobot', 'FireRobot', '123456', 'http://127.0.0.1:8883/robot/recvmsg', 0, 1);


================================================
FILE: broker/migrate/h2/V6__add_friend_alias.sql
================================================

alter table t_friend add column `_alias` varchar(64) DEFAULT NULL;


================================================
FILE: broker/migrate/h2/V7__add_createtime_user_group_table.sql
================================================
alter table t_user add column `_createTime` TIMESTAMP default CURRENT_TIMESTAMP;
alter table t_group add column `_createTime` TIMESTAMP default CURRENT_TIMESTAMP;


================================================
FILE: broker/migrate/h2/V8__add_content_type_in_messages.sql
================================================
alter table `t_messages` add column `_content_type` int(11) NOT NULL DEFAULT '0';


================================================
FILE: broker/migrate/h2/V9__add_sensitive_messages.sql
================================================

DROP TABLE IF EXISTS `t_sensitive_messages`;
CREATE TABLE `t_sensitive_messages` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_mid` bigint(20) NOT NULL,
  `_from` varchar(64) NOT NULL,
  `_type` tinyint NOT NULL DEFAULT 0,
  `_target` varchar(64) NOT NULL,
  `_line` int(11) NOT NULL DEFAULT 0,
  `_data` BLOB NOT NULL,
  `_searchable_key` TEXT DEFAULT NULL,
  `_dt` DATETIME NOT NULL DEFAULT NOW(),
  `_content_type` int(11) NOT NULL DEFAULT 0,
  UNIQUE INDEX `sensitive_message_uid_index` (`_mid` ASC)
);


================================================
FILE: broker/migrate/mysql/V10__create_default_admin.sql
================================================

insert into t_user (`_uid`,`_name`,`_display_name`,`_type`,`_dt`) values ('admin','admin','系统管理员',3,1);



================================================
FILE: broker/migrate/mysql/V11__alter_device_token.sql
================================================
ALTER TABLE t_user_session MODIFY _token VARCHAR(240) DEFAULT NULL;


================================================
FILE: broker/migrate/mysql/V12__add_group_control_columns.sql
================================================
alter table `t_group` add column `_mute` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_join_type` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_private_chat` tinyint NOT NULL DEFAULT 0;
alter table `t_group` add column `_searchable` tinyint NOT NULL DEFAULT 0;


================================================
FILE: broker/migrate/mysql/V13__create_session_table.sql
================================================

DROP TABLE IF EXISTS `t_session`;
CREATE TABLE `t_session` (
  `row_id` varchar(50) not null primary key,
  `del_flag` tinyint(1) default 0 null,
  `create_time` timestamp null,
  `update_time` timestamp null,
  `expire_time` timestamp null,
  `user_id` int null,
  constraint `t_session_pk_2` unique (`user_id`, `expire_time`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


================================================
FILE: broker/migrate/mysql/V14__alter_createtime_user_group_table.sql
================================================
alter table t_user MODIFY column `_createTime` DATETIME NOT NULL DEFAULT NOW();
alter table t_group MODIFY column `_createTime` DATETIME NOT NULL DEFAULT NOW();


================================================
FILE: broker/migrate/mysql/V15__alter_session_table_time.sql
================================================
alter table t_session MODIFY column `create_time` DATETIME NOT NULL DEFAULT NOW();
alter table t_session MODIFY column `update_time` DATETIME NOT NULL DEFAULT NOW();
alter table t_session MODIFY column `expire_time` DATETIME NOT NULL DEFAULT NOW();



================================================
FILE: broker/migrate/mysql/V16__update_message_dt_gmt8.sql
================================================
update t_messages_0 set _dt = date_add(_dt, interval 8 hour);
update t_messages_1 set _dt = date_add(_dt, interval 8 hour);
update t_messages_2 set _dt = date_add(_dt, interval 8 hour);
update t_messages_3 set _dt = date_add(_dt, interval 8 hour);
update t_messages_4 set _dt = date_add(_dt, interval 8 hour);
update t_messages_5 set _dt = date_add(_dt, interval 8 hour);
update t_messages_6 set _dt = date_add(_dt, interval 8 hour);
update t_messages_7 set _dt = date_add(_dt, interval 8 hour);
update t_messages_8 set _dt = date_add(_dt, interval 8 hour);
update t_messages_9 set _dt = date_add(_dt, interval 8 hour);

update t_messages_10 set _dt = date_add(_dt, interval 8 hour);
update t_messages_11 set _dt = date_add(_dt, interval 8 hour);
update t_messages_12 set _dt = date_add(_dt, interval 8 hour);
update t_messages_13 set _dt = date_add(_dt, interval 8 hour);
update t_messages_14 set _dt = date_add(_dt, interval 8 hour);
update t_messages_15 set _dt = date_add(_dt, interval 8 hour);
update t_messages_16 set _dt = date_add(_dt, interval 8 hour);
update t_messages_17 set _dt = date_add(_dt, interval 8 hour);
update t_messages_18 set _dt = date_add(_dt, interval 8 hour);
update t_messages_19 set _dt = date_add(_dt, interval 8 hour);

update t_messages_20 set _dt = date_add(_dt, interval 8 hour);
update t_messages_21 set _dt = date_add(_dt, interval 8 hour);
update t_messages_22 set _dt = date_add(_dt, interval 8 hour);
update t_messages_23 set _dt = date_add(_dt, interval 8 hour);
update t_messages_24 set _dt = date_add(_dt, interval 8 hour);
update t_messages_25 set _dt = date_add(_dt, interval 8 hour);
update t_messages_26 set _dt = date_add(_dt, interval 8 hour);
update t_messages_27 set _dt = date_add(_dt, interval 8 hour);
update t_messages_28 set _dt = date_add(_dt, interval 8 hour);
update t_messages_29 set _dt = date_add(_dt, interval 8 hour);


update t_messages_30 set _dt = date_add(_dt, interval 8 hour);
update t_messages_31 set _dt = date_add(_dt, interval 8 hour);
update t_messages_32 set _dt = date_add(_dt, interval 8 hour);
update t_messages_33 set _dt = date_add(_dt, interval 8 hour);
update t_messages_34 set _dt = date_add(_dt, interval 8 hour);
update t_messages_35 set _dt = date_add(_dt, interval 8 hour);


================================================
FILE: broker/migrate/mysql/V17__add_default_sensitive_word.sql
================================================


================================================
FILE: broker/migrate/mysql/V18__create_settings_table.sql
================================================

DROP TABLE IF EXISTS `t_settings`;
CREATE TABLE `t_settings` (
  `id` int(11) NOT NULL PRIMARY KEY,
  `value` varchar(64) NOT NULL,
  `desc` varchar(128) NOT NULL default ""
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


insert into t_settings(`id`, `value`,`desc`) values (1, "3000", "最大群成员数量");


================================================
FILE: broker/migrate/mysql/V19__add_id_for_sensitive_word.sql
================================================
alter table `t_sensitiveword` add column `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT;


================================================
FILE: broker/migrate/mysql/V1__baseline.sql
================================================


================================================
FILE: broker/migrate/mysql/V20__alter_voip_token_length.sql
================================================
alter table `t_user_session` modify column `_voip_token` varchar(240) DEFAULT '';




================================================
FILE: broker/migrate/mysql/V21__add_friend_blocked.sql
================================================
alter table t_friend add column `_blacked` tinyint DEFAULT 0 COMMENT "0, normal; 1, blacked";
update t_friend set `_blacked` = 1 where `_state` = 2;


================================================
FILE: broker/migrate/mysql/V22__add_user_session_token_index.sql
================================================
alter table `t_user_session` ADD INDEX `session_token_index` ( `_token` );


================================================
FILE: broker/migrate/mysql/V23__add_friend_request_index.sql
================================================
alter table t_friend_request add index `friend_request_uid_index` (`_friend_uid`);


================================================
FILE: broker/migrate/mysql/V24__add_user_session_uid_index.sql
================================================
alter table `t_user_session` ADD INDEX `session_uid_index` ( `_uid` );


================================================
FILE: broker/migrate/mysql/V25__user_session_add_deleted.sql
================================================
alter table `t_user_session` add column `_deleted` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/mysql/V26__user_add_deleted.sql
================================================
alter table `t_user` add column `_deleted` tinyint DEFAULT 0;


================================================
FILE: broker/migrate/mysql/V27__refactor_channel_status.sql
================================================
update t_channel set `_status` = 64 where `_status` = 3;


================================================
FILE: broker/migrate/mysql/V28__alter_message_add_to_column.sql
================================================
alter table t_messages add column `_to` varchar(64) DEFAULT NULL;

alter table t_messages_0 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_1 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_2 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_3 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_4 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_5 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_6 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_7 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_8 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_9 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_10 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_11 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_12 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_13 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_14 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_15 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_16 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_17 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_18 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_19 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_20 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_21 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_22 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_23 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_24 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_25 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_26 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_27 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_28 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_29 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_30 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_31 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_32 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_33 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_34 add column `_to` varchar(64) DEFAULT NULL;
alter table t_messages_35 add column `_to` varchar(64) DEFAULT NULL;


================================================
FILE: broker/migrate/mysql/V29__add_friend_extra.sql
================================================
alter table t_friend add column `_extra` TEXT DEFAULT NULL;


================================================
FILE: broker/migrate/mysql/V2__create_table.sql
================================================

DROP TABLE IF EXISTS `t_messages`;
CREATE TABLE `t_messages` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_mid` bigint(20) NOT NULL,
  `_from` varchar(64) NOT NULL,
  `_type` tinyint NOT NULL DEFAULT 0,
  `_target` varchar(64) NOT NULL,
  `_line` int(11) NOT NULL DEFAULT 0,
  `_data` BLOB NOT NULL,
  `_searchable_key` TEXT DEFAULT NULL,
  `_dt` DATETIME NOT NULL,
  UNIQUE INDEX `message_uid_index` (`_mid` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages`;
CREATE TABLE `t_user_messages` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_mid` bigint(20) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_seq` bigint(20) NOT NULL,
  `_dt` DATETIME NOT NULL DEFAULT NOW(),
  INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_group`;
CREATE TABLE `t_group` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_gid` varchar(64) NOT NULL,
  `_name` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_owner` varchar(64) DEFAULT '',
  `_type` tinyint NOT NULL DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  `_member_count` int(11) DEFAULT 0,
  `_member_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `group_gid_index` (`_gid` DESC),
  INDEX `group_name_index` (`_name` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_group_member`;
CREATE TABLE `t_group_member` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_gid` varchar(64) NOT NULL,
  `_mid` varchar(64) DEFAULT '',
  `_alias` varchar(64) DEFAULT '',
  `_type` tinyint DEFAULT 0 COMMENT "0普通成员;1,管理员;2,群主,与Owner相同",
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_gid_mid_index` (`_gid`, `_mid`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_name` varchar(64) DEFAULT '',
  `_display_name` varchar(64) DEFAULT '',
  `_gender` int(11) NOT NULL DEFAULT 0,
  `_portrait` varchar(1024) DEFAULT '',
  `_mobile` varchar(64) DEFAULT '',
  `_email` varchar(64) DEFAULT '',
  `_address` varchar(64) DEFAULT '',
  `_company` varchar(64) DEFAULT '',
  `_social` varchar(64) DEFAULT '',
  `_passwd_md5` varchar(64) DEFAULT '',
  `_salt` varchar(64) DEFAULT '',
  `_extra` TEXT DEFAULT NULL,
  `_type` tinyint DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_uid_index` (`_uid` ASC),
  UNIQUE INDEX `user_name_index` (`_name` ASC),
  INDEX `user_display_name_index` (`_display_name` ASC),
  INDEX `user_mobile_index` (`_mobile` ASC),
  INDEX `user_email_index` (`_email` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_status`;
CREATE TABLE `t_user_status` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_status` int(11) NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_status_uid_index` (`_uid` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_friend_request`;
CREATE TABLE `t_friend_request` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_friend_uid` varchar(64) NOT NULL,
  `_reason` TEXT DEFAULT NULL,
  `_status` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  `_from_read_status` tinyint DEFAULT 0,
  `_to_read_status` tinyint DEFAULT 0,
  UNIQUE INDEX `fr_user_target_index` (`_uid` ASC, `_friend_uid` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_friend`;
CREATE TABLE `t_friend` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_friend_uid` varchar(64) NOT NULL,
  `_state` tinyint DEFAULT 0 COMMENT "0, normal; 1, deleted; 2, blacked",
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `f_user_target_index` (`_uid` ASC, `_friend_uid` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_setting`;
CREATE TABLE `t_user_setting` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_scope` int NOT NULL,
  `_key` varchar(64) NOT NULL,
  `_value` varchar(4096) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `user_setting_index` (`_uid` ASC, `_scope` ASC, `_key` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_id_generator`;
CREATE TABLE `t_id_generator` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci
AUTO_INCREMENT = 3;

DROP TABLE IF EXISTS `t_channel`;
CREATE TABLE `t_channel` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_name` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_owner` varchar(64) DEFAULT '',
  `_status` tinyint NOT NULL DEFAULT 0,
  `_desc` TEXT DEFAULT NULL,
  `_secret` varchar(64) DEFAULT '',
  `_callback` varchar(1024) DEFAULT '',
  `_extra` TEXT DEFAULT NULL,
  `_automatic` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `channel_cid_index` (`_cid` DESC),
  INDEX `channel_name_index` (`_name` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_channel_listener`;
CREATE TABLE `t_channel_listener` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_mid` varchar(64) DEFAULT '',
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `channel_cid_mid_index` (`_cid`, `_mid`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_session`;
CREATE TABLE `t_user_session` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_cid` varchar(64) NOT NULL,
  `_token` varchar(64) DEFAULT '',
  `_voip_token` varchar(64) DEFAULT '',
  `_secret` varchar(64) NOT NULL,
  `_db_secret` varchar(64) NOT NULL,
  `_platform` tinyint DEFAULT 0,
  `_push_type` tinyint DEFAULT 0,
  `_package_name` varchar(64) DEFAULT '',
  `_device_name` varchar(64) DEFAULT '',
  `_device_version` varchar(64) DEFAULT '',
  `_phone_name` varchar(64) DEFAULT '',
  `_language` varchar(64) DEFAULT '',
  `_carrier_name` varchar(64) DEFAULT '',
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `session_uid_cid_index` (`_cid`, `_uid`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_robot`;
CREATE TABLE `t_robot` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_owner` varchar(64) DEFAULT '',
  `_secret` varchar(64) DEFAULT '',
  `_callback` varchar(1024) DEFAULT '',
  `_state` tinyint DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `robot_uid_index` (`_uid` ASC),
  INDEX `robot_owner_index` (`_owner` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_thing`;
CREATE TABLE `t_thing` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_owner` varchar(64) DEFAULT '',
  `_token` varchar(64) DEFAULT '',
  `_state` tinyint DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `thing_uid_index` (`_uid` ASC),
  INDEX `thing_owner_index` (`_owner` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_chatroom`;
CREATE TABLE `t_chatroom` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_title` varchar(64) DEFAULT '',
  `_portrait` varchar(1024) DEFAULT '',
  `_state` tinyint NOT NULL DEFAULT 0,
  `_desc` TEXT DEFAULT NULL,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `chatroom_cid_index` (`_cid` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_sensitiveword`;
CREATE TABLE `t_sensitiveword` (
  `_word` TEXT DEFAULT NULL
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


================================================
FILE: broker/migrate/mysql/V30__create_chatroom_blacklist_manager.sql
================================================

DROP TABLE IF EXISTS `t_chatroom_blacklist`;
CREATE TABLE `t_chatroom_blacklist` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_state` tinyint NOT NULL DEFAULT 0,
  `_expired_time` bigint(20) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `cr_bl_uid_index` (`_cid`,_uid)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_chatroom_manager`;
CREATE TABLE `t_chatroom_manager` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_cid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_state` tinyint NOT NULL DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `cr_man_uid_index` (`_cid`,_uid)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;





================================================
FILE: broker/migrate/mysql/V31__add_user_messages_line.sql
================================================
alter table `t_user_messages` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_0` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_1` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_2` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_3` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_4` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_5` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_6` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_7` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_8` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_9` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_10` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_11` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_12` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_13` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_14` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_15` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_16` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_17` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_18` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_19` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_20` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_21` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_22` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_23` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_24` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_25` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_26` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_27` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_28` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_29` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_30` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_31` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_32` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_33` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_34` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_35` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_36` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_37` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_38` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_39` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_40` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_41` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_42` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_43` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_44` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_45` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_46` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_47` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_48` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_49` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_50` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_51` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_52` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_53` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_54` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_55` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_56` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_57` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_58` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_59` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_60` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_61` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_62` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_63` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_64` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_65` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_66` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_67` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_68` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_69` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_70` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_71` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_72` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_73` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_74` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_75` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_76` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_77` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_78` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_79` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_80` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_81` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_82` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_83` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_84` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_85` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_86` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_87` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_88` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_89` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_90` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_91` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_92` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_93` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_94` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_95` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_96` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_97` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_98` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_99` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_100` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_101` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_102` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_103` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_104` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_105` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_106` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_107` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_108` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_109` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_110` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_111` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_112` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_113` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_114` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_115` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_116` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_117` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_118` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_119` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_120` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_121` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_122` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_123` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_124` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_125` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_126` add column `_line` int(11) NOT NULL DEFAULT 0;
alter table `t_user_messages_127` add column `_line` int(11) NOT NULL DEFAULT 0;


alter table `t_user_messages` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_0` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_1` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_2` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_3` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_4` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_5` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_6` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_7` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_8` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_9` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_10` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_11` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_12` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_13` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_14` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_15` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_16` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_17` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_18` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_19` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_20` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_21` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_22` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_23` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_24` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_25` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_26` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_27` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_28` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_29` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_30` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_31` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_32` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_33` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_34` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_35` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_36` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_37` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_38` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_39` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_40` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_41` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_42` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_43` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_44` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_45` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_46` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_47` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_48` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_49` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_50` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_51` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_52` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_53` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_54` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_55` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_56` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_57` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_58` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_59` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_60` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_61` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_62` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_63` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_64` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_65` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_66` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_67` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_68` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_69` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_70` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_71` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_72` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_73` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_74` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_75` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_76` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_77` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_78` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_79` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_80` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_81` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_82` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_83` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_84` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_85` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_86` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_87` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_88` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_89` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_90` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_91` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_92` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_93` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_94` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_95` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_96` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_97` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_98` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_99` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_100` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_101` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_102` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_103` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_104` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_105` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_106` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_107` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_108` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_109` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_110` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_111` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_112` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_113` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_114` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_115` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_116` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_117` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_118` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_119` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_120` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_121` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_122` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_123` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_124` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_125` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_126` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );
alter table `t_user_messages_127` add INDEX `message_mid_line_uid_index` ( `_uid` DESC, `_line` DESC, `_mid` DESC );


================================================
FILE: broker/migrate/mysql/V32__create_device_table.sql
================================================

DROP TABLE IF EXISTS `t_thing`;

DROP TABLE IF EXISTS `t_device`;
CREATE TABLE `t_device` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_token` varchar(64) DEFAULT '',
  `_state` tinyint DEFAULT 0,
  `_extra` TEXT DEFAULT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `device_uid_index` (`_uid` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_device`;
CREATE TABLE `t_user_device` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_did` varchar(64) DEFAULT '',
  UNIQUE INDEX `user_device_uid_index` (`_uid` ASC, `_did` ASC),
  INDEX `user_device_did_index` (`_did` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


================================================
FILE: broker/migrate/mysql/V33__add_session_user_type.sql
================================================
alter table t_user_session add column `_user_type` tinyint DEFAULT 0 COMMENT "0, normal user; 1, robot; 2, device;";


================================================
FILE: broker/migrate/mysql/V34__create_receipt_table.sql
================================================

DROP TABLE IF EXISTS `t_read_report`;
CREATE TABLE `t_read_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NULL,
  `_type` tinyint NULL,
  `_line` int(11) NULL,
  `_target` varchar(64) NULL,
  `_dt` bigint(20) NOT NULL DEFAULT 0,
  INDEX `read_report_index` (`_uid`, `_type`, `_line`, `_target`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_read_report`;
CREATE TABLE `t_user_read_report` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_rid` int(11) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `user_read_report_index` (`_uid` DESC, `_seq` DESC),
    UNIQUE INDEX `user_read_report_index2` (`_uid` DESC, `_rid` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_delivery_report`;
CREATE TABLE `t_delivery_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_uid` varchar(64) NOT NULL,
  `_dt` bigint(20) NOT NULL,
  UNIQUE INDEX `delivery_index` (`_uid`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_delivery_report`;
CREATE TABLE `t_user_delivery_report` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `_rid` varchar(64) NOT NULL,
  `_uid` varchar(64) NOT NULL,
  `_seq` bigint(20) NOT NULL,
  `_dt` DATETIME NOT NULL DEFAULT NOW(),
  INDEX `user_delivery_index` (`_uid` DESC, `_seq` DESC),
  UNIQUE INDEX `user_delivery_index2` (`_uid` DESC, `_rid` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


================================================
FILE: broker/migrate/mysql/V35__add_group_member_create_dt.sql
================================================
alter table t_group_member add column `_create_dt`  bigint(20) DEFAULT 0, COMMENT "group member create time";


================================================
FILE: broker/migrate/mysql/V36__add_group_member_count_history_message.sql
================================================
alter table `t_group` add column `_history_message` tinyint NOT NULL DEFAULT 0, COMMENT "new group member can load group history messages";
alter table `t_group` add column `_max_member_count` int(11) NOT NULL DEFAULT 2000, COMMENT "max group member count";


================================================
FILE: broker/migrate/mysql/V37__alter_setting_column_name.sql
================================================
alter table `t_settings` change column `value` `_value` varchar(64) NOT NULL;
alter table `t_settings` change column `desc` `_desc` varchar(64) NOT NULL;


================================================
FILE: broker/migrate/mysql/V38__alter_group_searchable_column.sql
================================================
alter table `t_group` modify column `_searchable` int(11) NOT NULL DEFAULT 0;


================================================
FILE: broker/migrate/mysql/V39__create_files_table.sql
================================================
DROP TABLE IF EXISTS `t_file`;
CREATE TABLE `t_file` (
  `_mid` bigint(20) NOT NULL PRIMARY KEY,
  `_from` varchar(64) NOT NULL,
  `_type` tinyint NOT NULL DEFAULT 0,
  `_target` varchar(64) NOT NULL,
  `_line` int(11) NOT NULL DEFAULT 0,
  `_name` varchar(128) DEFAULT '',
  `_url` varchar(1024) NOT NULL DEFAULT '',
  `_size` int(11) NOT NULL DEFAULT 0,
  `_download_count` int(11) DEFAULT 0,
  `_dt` bigint(20) NOT NULL,
  INDEX `file_conv_index` (`_type`, `_line`, `_target`, `_mid`),
  INDEX `file_user_index` (`_from`, `_mid`)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


================================================
FILE: broker/migrate/mysql/V3__create_sharding_table.sql
================================================

DROP TABLE IF EXISTS `t_messages_0`;
CREATE TABLE `t_messages_0` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_1`;
CREATE TABLE `t_messages_1` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_2`;
CREATE TABLE `t_messages_2` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_3`;
CREATE TABLE `t_messages_3` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_4`;
CREATE TABLE `t_messages_4` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_5`;
CREATE TABLE `t_messages_5` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_6`;
CREATE TABLE `t_messages_6` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_7`;
CREATE TABLE `t_messages_7` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_8`;
CREATE TABLE `t_messages_8` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_9`;
CREATE TABLE `t_messages_9` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_10`;
CREATE TABLE `t_messages_10` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_11`;
CREATE TABLE `t_messages_11` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_12`;
CREATE TABLE `t_messages_12` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_13`;
CREATE TABLE `t_messages_13` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_14`;
CREATE TABLE `t_messages_14` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_15`;
CREATE TABLE `t_messages_15` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_16`;
CREATE TABLE `t_messages_16` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_17`;
CREATE TABLE `t_messages_17` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_18`;
CREATE TABLE `t_messages_18` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_19`;
CREATE TABLE `t_messages_19` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_20`;
CREATE TABLE `t_messages_20` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_21`;
CREATE TABLE `t_messages_21` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_22`;
CREATE TABLE `t_messages_22` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_23`;
CREATE TABLE `t_messages_23` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_24`;
CREATE TABLE `t_messages_24` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_25`;
CREATE TABLE `t_messages_25` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_26`;
CREATE TABLE `t_messages_26` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_27`;
CREATE TABLE `t_messages_27` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_28`;
CREATE TABLE `t_messages_28` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_29`;
CREATE TABLE `t_messages_29` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_30`;
CREATE TABLE `t_messages_30` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_31`;
CREATE TABLE `t_messages_31` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_32`;
CREATE TABLE `t_messages_32` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_messages_33`;
CREATE TABLE `t_messages_33` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_34`;
CREATE TABLE `t_messages_34` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_messages_35`;
CREATE TABLE `t_messages_35` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_from` varchar(64) NOT NULL,
    `_type` tinyint NOT NULL DEFAULT 0,
    `_target` varchar(64) NOT NULL,
    `_line` int(11) NOT NULL DEFAULT 0,
    `_data` BLOB NOT NULL,
    `_searchable_key` TEXT DEFAULT NULL,
    `_dt` DATETIME NOT NULL,
    UNIQUE INDEX `message_uid_index` (`_mid` DESC)
  )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_0`;
CREATE TABLE `t_user_messages_0` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_1`;
CREATE TABLE `t_user_messages_1` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_2`;
CREATE TABLE `t_user_messages_2` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_3`;
CREATE TABLE `t_user_messages_3` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_4`;
CREATE TABLE `t_user_messages_4` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_5`;
CREATE TABLE `t_user_messages_5` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_6`;
CREATE TABLE `t_user_messages_6` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_7`;
CREATE TABLE `t_user_messages_7` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_8`;
CREATE TABLE `t_user_messages_8` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_9`;
CREATE TABLE `t_user_messages_9` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_10`;
CREATE TABLE `t_user_messages_10` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_11`;
CREATE TABLE `t_user_messages_11` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_12`;
CREATE TABLE `t_user_messages_12` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_13`;
CREATE TABLE `t_user_messages_13` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_14`;
CREATE TABLE `t_user_messages_14` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_15`;
CREATE TABLE `t_user_messages_15` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_16`;
CREATE TABLE `t_user_messages_16` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_17`;
CREATE TABLE `t_user_messages_17` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_18`;
CREATE TABLE `t_user_messages_18` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_19`;
CREATE TABLE `t_user_messages_19` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_20`;
CREATE TABLE `t_user_messages_20` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_21`;
CREATE TABLE `t_user_messages_21` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_22`;
CREATE TABLE `t_user_messages_22` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_23`;
CREATE TABLE `t_user_messages_23` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_24`;
CREATE TABLE `t_user_messages_24` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_25`;
CREATE TABLE `t_user_messages_25` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_26`;
CREATE TABLE `t_user_messages_26` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_27`;
CREATE TABLE `t_user_messages_27` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_28`;
CREATE TABLE `t_user_messages_28` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_29`;
CREATE TABLE `t_user_messages_29` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_30`;
CREATE TABLE `t_user_messages_30` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_31`;
CREATE TABLE `t_user_messages_31` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_32`;
CREATE TABLE `t_user_messages_32` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_33`;
CREATE TABLE `t_user_messages_33` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_34`;
CREATE TABLE `t_user_messages_34` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_35`;
CREATE TABLE `t_user_messages_35` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_36`;
CREATE TABLE `t_user_messages_36` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_37`;
CREATE TABLE `t_user_messages_37` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_38`;
CREATE TABLE `t_user_messages_38` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_39`;
CREATE TABLE `t_user_messages_39` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_40`;
CREATE TABLE `t_user_messages_40` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_41`;
CREATE TABLE `t_user_messages_41` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_42`;
CREATE TABLE `t_user_messages_42` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_43`;
CREATE TABLE `t_user_messages_43` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_44`;
CREATE TABLE `t_user_messages_44` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_45`;
CREATE TABLE `t_user_messages_45` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_46`;
CREATE TABLE `t_user_messages_46` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_47`;
CREATE TABLE `t_user_messages_47` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_48`;
CREATE TABLE `t_user_messages_48` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_49`;
CREATE TABLE `t_user_messages_49` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_50`;
CREATE TABLE `t_user_messages_50` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_51`;
CREATE TABLE `t_user_messages_51` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_52`;
CREATE TABLE `t_user_messages_52` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_53`;
CREATE TABLE `t_user_messages_53` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_54`;
CREATE TABLE `t_user_messages_54` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_55`;
CREATE TABLE `t_user_messages_55` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_56`;
CREATE TABLE `t_user_messages_56` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_57`;
CREATE TABLE `t_user_messages_57` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_58`;
CREATE TABLE `t_user_messages_58` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_59`;
CREATE TABLE `t_user_messages_59` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_60`;
CREATE TABLE `t_user_messages_60` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_61`;
CREATE TABLE `t_user_messages_61` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_62`;
CREATE TABLE `t_user_messages_62` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_63`;
CREATE TABLE `t_user_messages_63` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_64`;
CREATE TABLE `t_user_messages_64` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_65`;
CREATE TABLE `t_user_messages_65` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_66`;
CREATE TABLE `t_user_messages_66` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_67`;
CREATE TABLE `t_user_messages_67` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_68`;
CREATE TABLE `t_user_messages_68` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_69`;
CREATE TABLE `t_user_messages_69` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_70`;
CREATE TABLE `t_user_messages_70` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_71`;
CREATE TABLE `t_user_messages_71` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_72`;
CREATE TABLE `t_user_messages_72` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_73`;
CREATE TABLE `t_user_messages_73` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_74`;
CREATE TABLE `t_user_messages_74` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_75`;
CREATE TABLE `t_user_messages_75` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;


DROP TABLE IF EXISTS `t_user_messages_76`;
CREATE TABLE `t_user_messages_76` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` bigint(20) NOT NULL,
    `_dt` DATETIME NOT NULL DEFAULT NOW(),
    INDEX `message_seq_uid_index` (`_uid` DESC, `_seq` DESC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;

DROP TABLE IF EXISTS `t_user_messages_77`;
CREATE TABLE `t_user_messages_77` (
    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `_mid` bigint(20) NOT NULL,
    `_uid` varchar(64) NOT NULL,
    `_seq` b
Download .txt
gitextract_689bbic2/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── LICENSE_996
├── LICENSE_mqtt-jmeter
├── README.md
├── broker/
│   ├── config/
│   │   ├── hazelcast.xml
│   │   └── wildfirechat.conf
│   ├── migrate/
│   │   ├── h2/
│   │   │   ├── V10__create_default_admin.sql
│   │   │   ├── V11__alter_device_token.sql
│   │   │   ├── V12__add_group_control_columns.sql
│   │   │   ├── V13__create_settings_table.sql
│   │   │   ├── V14__add_id_for_sensitive_word.sql
│   │   │   ├── V15__alter_voip_token_length.sql
│   │   │   ├── V16__add_friend_blocked.sql
│   │   │   ├── V17__add_user_session_token_index.sql
│   │   │   ├── V18__add_friend_request_index.sql
│   │   │   ├── V19__add_user_session_uid_index.sql
│   │   │   ├── V1__baseline.sql
│   │   │   ├── V20__user_session_add_deleted.sql
│   │   │   ├── V21__user_add_deleted.sql
│   │   │   ├── V22__refactor_channel_status.sql
│   │   │   ├── V23__alter_message_add_to_column.sql
│   │   │   ├── V24__add_friend_extra.sql
│   │   │   ├── V25__create_chatroom_blacklist_manager.sql
│   │   │   ├── V26__add_user_messages_line.sql
│   │   │   ├── V27__create_device_table.sql
│   │   │   ├── V28__add_session_user_type.sql
│   │   │   ├── V29__create_receipt_table.sql
│   │   │   ├── V2__create_table.sql
│   │   │   ├── V30__add_group_member_create_dt.sql
│   │   │   ├── V31__add_group_member_count_history_message.sql
│   │   │   ├── V32__alter_setting_column_name.sql
│   │   │   ├── V33__alter_group_searchable_column.sql
│   │   │   ├── V34__create_files_table.sql
│   │   │   ├── V35__create_file_transfer_user.sql
│   │   │   ├── V36__alter_channel_status_column.sql
│   │   │   ├── V37__add_user_messages_mid_index.sql
│   │   │   ├── V38__add_user_messages_conv_info.sql
│   │   │   ├── V39__add_group_member_friend_request_extra.sql
│   │   │   ├── V3__create_sharding_table.sql
│   │   │   ├── V40__add_user_messages_cont_type.sql
│   │   │   ├── V41__alter_user_setting_key_column.sql
│   │   │   ├── V42__create_secret_chat_table.sql
│   │   │   ├── V43__add_message_table_conversation_index.sql
│   │   │   ├── V44__add_channel_listener_table_member_index.sql
│   │   │   ├── V45__add_channel_menu_column.sql
│   │   │   ├── V46__add_group_member_mid_index.sql
│   │   │   ├── V47__create_super_group.sql
│   │   │   ├── V48__group_add_deleted_column.sql
│   │   │   ├── V49__add_domain_table.sql
│   │   │   ├── V4__create_default_chatroom.sql
│   │   │   ├── V50__update_group_member_index.sql
│   │   │   ├── V51__add_not_allow_name_setting.sql
│   │   │   ├── V52__modify_message_target.sql
│   │   │   ├── V53__session_add_ip_column.sql
│   │   │   ├── V54__add_group_member_index.sql
│   │   │   ├── V55__create_conference_table.sql
│   │   │   ├── V56__create_join_group_request_table.sql
│   │   │   ├── V57__create_friend_index.sql
│   │   │   ├── V5__create_default_robot.sql
│   │   │   ├── V6__add_friend_alias.sql
│   │   │   ├── V7__add_createtime_user_group_table.sql
│   │   │   ├── V8__add_content_type_in_messages.sql
│   │   │   └── V9__add_sensitive_messages.sql
│   │   ├── mysql/
│   │   │   ├── V10__create_default_admin.sql
│   │   │   ├── V11__alter_device_token.sql
│   │   │   ├── V12__add_group_control_columns.sql
│   │   │   ├── V13__create_session_table.sql
│   │   │   ├── V14__alter_createtime_user_group_table.sql
│   │   │   ├── V15__alter_session_table_time.sql
│   │   │   ├── V16__update_message_dt_gmt8.sql
│   │   │   ├── V17__add_default_sensitive_word.sql
│   │   │   ├── V18__create_settings_table.sql
│   │   │   ├── V19__add_id_for_sensitive_word.sql
│   │   │   ├── V1__baseline.sql
│   │   │   ├── V20__alter_voip_token_length.sql
│   │   │   ├── V21__add_friend_blocked.sql
│   │   │   ├── V22__add_user_session_token_index.sql
│   │   │   ├── V23__add_friend_request_index.sql
│   │   │   ├── V24__add_user_session_uid_index.sql
│   │   │   ├── V25__user_session_add_deleted.sql
│   │   │   ├── V26__user_add_deleted.sql
│   │   │   ├── V27__refactor_channel_status.sql
│   │   │   ├── V28__alter_message_add_to_column.sql
│   │   │   ├── V29__add_friend_extra.sql
│   │   │   ├── V2__create_table.sql
│   │   │   ├── V30__create_chatroom_blacklist_manager.sql
│   │   │   ├── V31__add_user_messages_line.sql
│   │   │   ├── V32__create_device_table.sql
│   │   │   ├── V33__add_session_user_type.sql
│   │   │   ├── V34__create_receipt_table.sql
│   │   │   ├── V35__add_group_member_create_dt.sql
│   │   │   ├── V36__add_group_member_count_history_message.sql
│   │   │   ├── V37__alter_setting_column_name.sql
│   │   │   ├── V38__alter_group_searchable_column.sql
│   │   │   ├── V39__create_files_table.sql
│   │   │   ├── V3__create_sharding_table.sql
│   │   │   ├── V40__create_file_transfer_user.sql
│   │   │   ├── V41__alter_channel_status_column.sql
│   │   │   ├── V42__add_user_messages_mid_index.sql
│   │   │   ├── V43__add_user_messages_conv_info.sql
│   │   │   ├── V44__add_group_member_friend_request_extra.sql
│   │   │   ├── V45__add_user_messages_cont_type.sql
│   │   │   ├── V46__utf8mb4_unicode_ci_to_utf8mb4_bin.sql
│   │   │   ├── V47__fix_read_report_error.sql
│   │   │   ├── V48__alter_user_setting_key_column.sql
│   │   │   ├── V49__create_secret_chat_table.sql
│   │   │   ├── V4__create_default_chatroom.sql
│   │   │   ├── V50__add_message_table_conversation_index.sql
│   │   │   ├── V51__add_channel_listener_table_member_index.sql
│   │   │   ├── V52__add_channel_menu_column.sql
│   │   │   ├── V53__add_group_member_mid_index.sql
│   │   │   ├── V54__create_super_group.sql
│   │   │   ├── V55__group_add_deleted_column.sql
│   │   │   ├── V56__add_domain_table.sql
│   │   │   ├── V57__update_group_member_index.sql
│   │   │   ├── V58__reupdate_group_member_index.sql
│   │   │   ├── V59__add_no_allow_name_setting.sql
│   │   │   ├── V5__create_default_robot.sql
│   │   │   ├── V60__modify_messages_target.sql
│   │   │   ├── V61__session_add_ip_column.sql
│   │   │   ├── V64__add_group_member_index.sql
│   │   │   ├── V65__create_conference_table.sql
│   │   │   ├── V66__create_join_group_request_table.sql
│   │   │   ├── V67__create_friend_index.sql
│   │   │   ├── V6__add_friend_alias.sql
│   │   │   ├── V7__add_createtime_user_group_table.sql
│   │   │   ├── V8__add_content_type_in_messages.sql
│   │   │   └── V9__add_sensitive_messages.sql
│   │   └── 重要!!!必看!!!.txt
│   ├── nginx/
│   │   └── imserver.conf
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   ├── cn/
│           │   │   └── wildfirechat/
│           │   │       ├── push/
│           │   │       │   ├── PushMessage.java
│           │   │       │   └── PushServer.java
│           │   │       └── server/
│           │   │           ├── Server.java
│           │   │           └── ThreadPoolExecutorWrapper.java
│           │   ├── com/
│           │   │   └── xiaoleilu/
│           │   │       └── loServer/
│           │   │           ├── LoFileServer.java
│           │   │           ├── LoServer.java
│           │   │           ├── RestResult.java
│           │   │           ├── ServerSetting.java
│           │   │           ├── action/
│           │   │           │   ├── Action.java
│           │   │           │   ├── CheckTokenAction.java
│           │   │           │   ├── ClassUtil.java
│           │   │           │   ├── DefaultIndexAction.java
│           │   │           │   ├── FileAction.java
│           │   │           │   ├── IMAction.java
│           │   │           │   ├── NotFoundAction.java
│           │   │           │   ├── RouteAction.java
│           │   │           │   ├── UnknownErrorAction.java
│           │   │           │   ├── UploadFileAction.java
│           │   │           │   ├── VersionAction.java
│           │   │           │   ├── admin/
│           │   │           │   │   ├── AddFriendRequestAction.java
│           │   │           │   │   ├── AddGroupMemberAction.java
│           │   │           │   │   ├── AdminAction.java
│           │   │           │   │   ├── AliasGetAction.java
│           │   │           │   │   ├── AliasPutAction.java
│           │   │           │   │   ├── ApplicationGetUserInfoAction.java
│           │   │           │   │   ├── BlacklistAction.java
│           │   │           │   │   ├── BlacklistGetAction.java
│           │   │           │   │   ├── BlockUserAction.java
│           │   │           │   │   ├── BroadcastMessageAction.java
│           │   │           │   │   ├── ChannelSubscriberAction.java
│           │   │           │   │   ├── CheckUserOnlineAction.java
│           │   │           │   │   ├── CheckUserSubscribeChannelAction.java
│           │   │           │   │   ├── CreateChannelAction.java
│           │   │           │   │   ├── CreateChatroomAction.java
│           │   │           │   │   ├── CreateGroupAction.java
│           │   │           │   │   ├── CreateRobotAction.java
│           │   │           │   │   ├── CreateUserAction.java
│           │   │           │   │   ├── DestoryChatroomAction.java
│           │   │           │   │   ├── DestroyChannelAction.java
│           │   │           │   │   ├── DestroyUserAction.java
│           │   │           │   │   ├── DismissGroupAction.java
│           │   │           │   │   ├── FriendExtraPutAction.java
│           │   │           │   │   ├── FriendRelationAction.java
│           │   │           │   │   ├── FriendRelationGetAction.java
│           │   │           │   │   ├── GetAllUserAction.java
│           │   │           │   │   ├── GetBatchUserAction.java
│           │   │           │   │   ├── GetChannelAction.java
│           │   │           │   │   ├── GetChatroomInfoAction.java
│           │   │           │   │   ├── GetChatroomMembersAction.java
│           │   │           │   │   ├── GetCommonGroupsAction.java
│           │   │           │   │   ├── GetGroupInfoAction.java
│           │   │           │   │   ├── GetGroupMemberAction.java
│           │   │           │   │   ├── GetGroupMembersAction.java
│           │   │           │   │   ├── GetIMTokenAction.java
│           │   │           │   │   ├── GetMessageAction.java
│           │   │           │   │   ├── GetOnlineUserAction.java
│           │   │           │   │   ├── GetRobotAction.java
│           │   │           │   │   ├── GetSystemSettingAction.java
│           │   │           │   │   ├── GetUploadUrlAction.java
│           │   │           │   │   ├── GetUserAction.java
│           │   │           │   │   ├── GetUserBlockListAction.java
│           │   │           │   │   ├── GetUserBlockStatusAction.java
│           │   │           │   │   ├── GetUserChatroomAction.java
│           │   │           │   │   ├── GetUserGroupsAction.java
│           │   │           │   │   ├── GetUserGroupsByTypeAction.java
│           │   │           │   │   ├── GetUserOnlineCountAction.java
│           │   │           │   │   ├── GetUserRobotsAction.java
│           │   │           │   │   ├── GetUserSessionsAction.java
│           │   │           │   │   ├── GetUsersByEmailAction.java
│           │   │           │   │   ├── HealthAction.java
│           │   │           │   │   ├── KickoffGroupMemberAction.java
│           │   │           │   │   ├── KickoffUserClientAction.java
│           │   │           │   │   ├── ModifyGroupInfoAction.java
│           │   │           │   │   ├── ModifyGroupMemberAliasAction.java
│           │   │           │   │   ├── ModifyGroupMemberExtraAction.java
│           │   │           │   │   ├── MulticastMessageAction.java
│           │   │           │   │   ├── PutSystemSettingAction.java
│           │   │           │   │   ├── QuitGroupMemberAction.java
│           │   │           │   │   ├── RecallMessageAction.java
│           │   │           │   │   ├── RecallMultiCastMessageAction.java
│           │   │           │   │   ├── RelationGetAction.java
│           │   │           │   │   ├── SendMessageAction.java
│           │   │           │   │   ├── SensitiveWordAddAction.java
│           │   │           │   │   ├── SensitiveWordDeleteAction.java
│           │   │           │   │   ├── SensitiveWordQueryAction.java
│           │   │           │   │   ├── SetGroupManagerAction.java
│           │   │           │   │   ├── TransferGroupAction.java
│           │   │           │   │   └── UpdateUserAction.java
│           │   │           │   ├── channel/
│           │   │           │   │   ├── ApplicationGetUserInfoAction.java
│           │   │           │   │   ├── ChannelAction.java
│           │   │           │   │   ├── GetChannelAction.java
│           │   │           │   │   ├── GetChannelSubscribersAction.java
│           │   │           │   │   ├── GetIsChannelSubscriberAction.java
│           │   │           │   │   ├── GetUserAction.java
│           │   │           │   │   ├── ModifyChannelProfileAction.java
│           │   │           │   │   ├── SendMessageAction.java
│           │   │           │   │   └── SubscriberChannelAction.java
│           │   │           │   └── robot/
│           │   │           │       ├── AddGroupMemberAction.java
│           │   │           │       ├── ApplicationGetUserInfoAction.java
│           │   │           │       ├── CreateGroupAction.java
│           │   │           │       ├── DeleteCallbackAction.java
│           │   │           │       ├── DismissGroupAction.java
│           │   │           │       ├── GetCallbackAction.java
│           │   │           │       ├── GetGroupInfoAction.java
│           │   │           │       ├── GetGroupMemberAction.java
│           │   │           │       ├── GetGroupMembersAction.java
│           │   │           │       ├── GetProfileAction.java
│           │   │           │       ├── GetUploadUrlAction.java
│           │   │           │       ├── GetUserAction.java
│           │   │           │       ├── KickoffGroupMemberAction.java
│           │   │           │       ├── ModifyGroupInfoAction.java
│           │   │           │       ├── ModifyGroupMemberAliasAction.java
│           │   │           │       ├── ModifyGroupMemberExtraAction.java
│           │   │           │       ├── QuitGroupMemberAction.java
│           │   │           │       ├── ReplyMessageAction.java
│           │   │           │       ├── RobotAction.java
│           │   │           │       ├── SendMessageAction.java
│           │   │           │       ├── SetCallbackAction.java
│           │   │           │       ├── TransferGroupAction.java
│           │   │           │       └── UpdateProfileAction.java
│           │   │           ├── annotation/
│           │   │           │   ├── HttpMethod.java
│           │   │           │   ├── RequireAuthentication.java
│           │   │           │   └── Route.java
│           │   │           ├── exception/
│           │   │           │   └── ServerSettingException.java
│           │   │           ├── filter/
│           │   │           │   └── Filter.java
│           │   │           ├── handler/
│           │   │           │   ├── ActionHandler.java
│           │   │           │   ├── AdminActionHandler.java
│           │   │           │   ├── HttpChunkContentCompressor.java
│           │   │           │   ├── HttpFileServerController.java
│           │   │           │   ├── HttpFileServerHandler.java
│           │   │           │   ├── HttpResponseHelper.java
│           │   │           │   ├── IMActionHandler.java
│           │   │           │   ├── Request.java
│           │   │           │   └── Response.java
│           │   │           ├── listener/
│           │   │           │   └── FileProgressiveFutureListener.java
│           │   │           └── model/
│           │   │               └── FriendData.java
│           │   ├── io/
│           │   │   ├── moquette/
│           │   │   │   ├── BrokerConstants.java
│           │   │   │   ├── connections/
│           │   │   │   │   ├── IConnectionsManager.java
│           │   │   │   │   ├── MqttConnectionMetrics.java
│           │   │   │   │   └── MqttSession.java
│           │   │   │   ├── imhandler/
│           │   │   │   │   ├── AddFriendHandler.java
│           │   │   │   │   ├── AddGroupMember.java
│           │   │   │   │   ├── BlackListRequestHandler.java
│           │   │   │   │   ├── BroadcastMessageHandler.java
│           │   │   │   │   ├── ChannelListenMember.java
│           │   │   │   │   ├── ChannelListenedListHandler.java
│           │   │   │   │   ├── ChannelSearchHandler.java
│           │   │   │   │   ├── ConfigApplicationHandler.java
│           │   │   │   │   ├── CreateChannelHandler.java
│           │   │   │   │   ├── CreateGroupHandler.java
│           │   │   │   │   ├── DeleteFriendHandler.java
│           │   │   │   │   ├── DestroyChannelHandler.java
│           │   │   │   │   ├── DestroyUserHandler.java
│           │   │   │   │   ├── DisconnectHandler.java
│           │   │   │   │   ├── DismissGroupHandler.java
│           │   │   │   │   ├── FriendPullHandler.java
│           │   │   │   │   ├── FriendRequestPullHandler.java
│           │   │   │   │   ├── GetApplicationTokenHandler.java
│           │   │   │   │   ├── GetChannelInfoHandler.java
│           │   │   │   │   ├── GetChatroomInfoHandler.java
│           │   │   │   │   ├── GetChatroomMemberHandler.java
│           │   │   │   │   ├── GetCommonGroupsHandler.java
│           │   │   │   │   ├── GetGroupInfoHandler.java
│           │   │   │   │   ├── GetGroupMemberHandler.java
│           │   │   │   │   ├── GetMediaUploadTokenHandler.java
│           │   │   │   │   ├── GetMyGroupsHandler.java
│           │   │   │   │   ├── GetQiniuUploadTokenHandler.java
│           │   │   │   │   ├── GetTokenHandler.java
│           │   │   │   │   ├── GetUserInfoHandler.java
│           │   │   │   │   ├── GetUserSettingHandler.java
│           │   │   │   │   ├── GroupHandler.java
│           │   │   │   │   ├── HandleFriendRequestHandler.java
│           │   │   │   │   ├── Handler.java
│           │   │   │   │   ├── IMHandler.java
│           │   │   │   │   ├── JoinChatroomHandler.java
│           │   │   │   │   ├── KickoffGroupMember.java
│           │   │   │   │   ├── KickoffPCClientHandler.java
│           │   │   │   │   ├── LoadRemoteMessagesHandler.java
│           │   │   │   │   ├── ModifyChannelInfoHandler.java
│           │   │   │   │   ├── ModifyGroupAliasHandler.java
│           │   │   │   │   ├── ModifyGroupInfoHandler.java
│           │   │   │   │   ├── ModifyGroupMemberAliasHandler.java
│           │   │   │   │   ├── ModifyGroupMemberExtraHandler.java
│           │   │   │   │   ├── ModifyMyInfoHandler.java
│           │   │   │   │   ├── MultiCastMessageHandler.java
│           │   │   │   │   ├── PullMessageHandler.java
│           │   │   │   │   ├── PutUserSettingHandler.java
│           │   │   │   │   ├── QuitChatroomHandler.java
│           │   │   │   │   ├── QuitGroupHandler.java
│           │   │   │   │   ├── RecallMessageHandler.java
│           │   │   │   │   ├── RecallMultiCastMessageHandler.java
│           │   │   │   │   ├── ReplyMessageHandler.java
│           │   │   │   │   ├── RouteHandler.java
│           │   │   │   │   ├── SendMessageHandler.java
│           │   │   │   │   ├── SetFriendAliasRequestHandler.java
│           │   │   │   │   ├── SetFriendExtraHandler.java
│           │   │   │   │   ├── SetGroupManagerHandler.java
│           │   │   │   │   ├── SyncFriendRequestUnreadHandler.java
│           │   │   │   │   ├── TransferChannelHandler.java
│           │   │   │   │   ├── TransferGroupHandler.java
│           │   │   │   │   ├── UploadDeviceTokenHandler.java
│           │   │   │   │   └── UserSearchHandler.java
│           │   │   │   ├── interception/
│           │   │   │   │   ├── InterceptHandler.java
│           │   │   │   │   ├── Interceptor.java
│           │   │   │   │   └── messages/
│           │   │   │   │       ├── InterceptAbstractMessage.java
│           │   │   │   │       ├── InterceptAcknowledgedMessage.java
│           │   │   │   │       ├── InterceptConnectMessage.java
│           │   │   │   │       ├── InterceptConnectionLostMessage.java
│           │   │   │   │       ├── InterceptDisconnectMessage.java
│           │   │   │   │       ├── InterceptMessage.java
│           │   │   │   │       └── InterceptPublishMessage.java
│           │   │   │   ├── logging/
│           │   │   │   │   └── LoggingUtils.java
│           │   │   │   ├── persistence/
│           │   │   │   │   ├── ChannelLoader.java
│           │   │   │   │   ├── ChatroomLoader.java
│           │   │   │   │   ├── DatabaseStore.java
│           │   │   │   │   ├── GroupLoader.java
│           │   │   │   │   ├── MemoryMessagesStore.java
│           │   │   │   │   ├── MemorySessionStore.java
│           │   │   │   │   ├── MemoryStorageService.java
│           │   │   │   │   ├── MessageLoader.java
│           │   │   │   │   ├── RobotLoader.java
│           │   │   │   │   ├── ServerAPIHelper.java
│           │   │   │   │   ├── UserClientEntry.java
│           │   │   │   │   ├── UserLoader.java
│           │   │   │   │   ├── UserStatusLoader.java
│           │   │   │   │   └── remote/
│           │   │   │   │       └── RequestInfo.java
│           │   │   │   ├── server/
│           │   │   │   │   ├── ConnectionDescriptor.java
│           │   │   │   │   ├── ConnectionDescriptorStore.java
│           │   │   │   │   ├── Constants.java
│           │   │   │   │   ├── DefaultMoquetteSslContextCreator.java
│           │   │   │   │   ├── Server.java
│           │   │   │   │   ├── ServerAcceptor.java
│           │   │   │   │   ├── config/
│           │   │   │   │   │   ├── ClasspathResourceLoader.java
│           │   │   │   │   │   ├── ConfigurationParser.java
│           │   │   │   │   │   ├── FileResourceLoader.java
│           │   │   │   │   │   ├── IConfig.java
│           │   │   │   │   │   ├── IResourceLoader.java
│           │   │   │   │   │   ├── MediaServerConfig.java
│           │   │   │   │   │   ├── MemoryConfig.java
│           │   │   │   │   │   └── ResourceLoaderConfig.java
│           │   │   │   │   └── netty/
│           │   │   │   │       ├── AutoFlushHandler.java
│           │   │   │   │       ├── MoquetteIdleTimeoutHandler.java
│           │   │   │   │       ├── NettyAcceptor.java
│           │   │   │   │       ├── NettyMQTTHandler.java
│           │   │   │   │       ├── NettyUtils.java
│           │   │   │   │       └── metrics/
│           │   │   │   │           ├── BytesMetrics.java
│           │   │   │   │           ├── BytesMetricsCollector.java
│           │   │   │   │           ├── BytesMetricsHandler.java
│           │   │   │   │           ├── MQTTMessageLogger.java
│           │   │   │   │           ├── MessageMetrics.java
│           │   │   │   │           ├── MessageMetricsCollector.java
│           │   │   │   │           └── MessageMetricsHandler.java
│           │   │   │   └── spi/
│           │   │   │       ├── ClientSession.java
│           │   │   │       ├── IMatchingCondition.java
│           │   │   │       ├── IMessagesStore.java
│           │   │   │       ├── IMessaging.java
│           │   │   │       ├── ISessionsStore.java
│           │   │   │       ├── IStore.java
│           │   │   │       ├── MessageGUID.java
│           │   │   │       ├── impl/
│           │   │   │       │   ├── BrokerInterceptor.java
│           │   │   │       │   ├── DebugUtils.java
│           │   │   │       │   ├── DesUtil.java
│           │   │   │       │   ├── InternalRepublisher.java
│           │   │   │       │   ├── MessagesPublisher.java
│           │   │   │       │   ├── PersistentQueueMessageSender.java
│           │   │   │       │   ├── ProtocolProcessor.java
│           │   │   │       │   ├── ProtocolProcessorBootstrapper.java
│           │   │   │       │   ├── Qos1PublishHandler.java
│           │   │   │       │   ├── QosPublishHandler.java
│           │   │   │       │   ├── Utils.java
│           │   │   │       │   ├── security/
│           │   │   │       │   │   ├── ACLFileParser.java
│           │   │   │       │   │   ├── AES.java
│           │   │   │       │   │   ├── AcceptAllAuthenticator.java
│           │   │   │       │   │   ├── Authorization.java
│           │   │   │       │   │   ├── AuthorizationsCollector.java
│           │   │   │       │   │   ├── DBAuthenticator.java
│           │   │   │       │   │   ├── DenyAllAuthorizator.java
│           │   │   │       │   │   ├── FileAuthenticator.java
│           │   │   │       │   │   ├── ITokenGenerator.java
│           │   │   │       │   │   ├── PermitAllAuthorizator.java
│           │   │   │       │   │   ├── ResourceAuthenticator.java
│           │   │   │       │   │   └── TokenAuthenticator.java
│           │   │   │       │   └── subscriptions/
│           │   │   │       │       ├── Token.java
│           │   │   │       │       └── Topic.java
│           │   │   │       └── security/
│           │   │   │           ├── DES.java
│           │   │   │           ├── IAuthenticator.java
│           │   │   │           ├── IAuthorizator.java
│           │   │   │           ├── ISslContextCreator.java
│           │   │   │           └── Tokenor.java
│           │   │   └── netty/
│           │   │       └── handler/
│           │   │           └── codec/
│           │   │               └── mqtt/
│           │   │                   ├── MqttCodecUtil.java
│           │   │                   ├── MqttConnAckMessage.java
│           │   │                   ├── MqttConnAckVariableHeader.java
│           │   │                   ├── MqttConnectAckPayload.java
│           │   │                   ├── MqttConnectMessage.java
│           │   │                   ├── MqttConnectPayload.java
│           │   │                   ├── MqttConnectReturnCode.java
│           │   │                   ├── MqttConnectVariableHeader.java
│           │   │                   ├── MqttConstant.java
│           │   │                   ├── MqttDecoder.java
│           │   │                   ├── MqttEncoder.java
│           │   │                   ├── MqttFixedHeader.java
│           │   │                   ├── MqttIdentifierRejectedException.java
│           │   │                   ├── MqttMessage.java
│           │   │                   ├── MqttMessageBuilders.java
│           │   │                   ├── MqttMessageFactory.java
│           │   │                   ├── MqttMessageIdAndPropertiesVariableHeader.java
│           │   │                   ├── MqttMessageIdVariableHeader.java
│           │   │                   ├── MqttMessageType.java
│           │   │                   ├── MqttProperties.java
│           │   │                   ├── MqttPubAckMessage.java
│           │   │                   ├── MqttPubReplyMessageVariableHeader.java
│           │   │                   ├── MqttPublishMessage.java
│           │   │                   ├── MqttPublishVariableHeader.java
│           │   │                   ├── MqttQoS.java
│           │   │                   ├── MqttReasonCodeAndPropertiesVariableHeader.java
│           │   │                   ├── MqttSubAckMessage.java
│           │   │                   ├── MqttSubAckPayload.java
│           │   │                   ├── MqttSubscribeMessage.java
│           │   │                   ├── MqttSubscribePayload.java
│           │   │                   ├── MqttSubscriptionOption.java
│           │   │                   ├── MqttTopicSubscription.java
│           │   │                   ├── MqttUnacceptableProtocolVersionException.java
│           │   │                   ├── MqttUnsubAckMessage.java
│           │   │                   ├── MqttUnsubAckPayload.java
│           │   │                   ├── MqttUnsubscribeMessage.java
│           │   │                   ├── MqttUnsubscribePayload.java
│           │   │                   ├── MqttVersion.java
│           │   │                   └── package-info.java
│           │   └── win/
│           │       └── liyufan/
│           │           └── im/
│           │               ├── DBUtil.java
│           │               ├── FrequencyLimistCounter.java
│           │               ├── GitRepositoryState.java
│           │               ├── GsonUtil.java
│           │               ├── HttpUtils.java
│           │               ├── IDUtils.java
│           │               ├── IMTopic.java
│           │               ├── MessageBundle.java
│           │               ├── MessageShardingUtil.java
│           │               ├── RateLimiter.java
│           │               ├── SensitiveFilter.java
│           │               ├── SpinLock.java
│           │               ├── UUIDGenerator.java
│           │               ├── UserSettingScope.java
│           │               ├── Utility.java
│           │               └── extended/
│           │                   └── mqttmessage/
│           │                       └── ModifiedMqttPubAckMessage.java
│           └── resources/
│               ├── c3p0-config.xml
│               └── log4j2.xml
├── build.sh
├── checkstyle-suppressions.xml
├── checkstyle.xml
├── common/
│   ├── pom.xml
│   └── src/
│       └── main/
│           └── java/
│               └── cn/
│                   └── wildfirechat/
│                       ├── common/
│                       │   ├── APIPath.java
│                       │   ├── ErrorCode.java
│                       │   └── IMExceptionEvent.java
│                       ├── pojos/
│                       │   ├── ArticleContent.java
│                       │   ├── BroadMessageData.java
│                       │   ├── BroadMessageResult.java
│                       │   ├── ChannelUpdateEvent.java
│                       │   ├── ChatroomMemberUpdateEvent.java
│                       │   ├── ChatroomUpdateEvent.java
│                       │   ├── ConferenceCreateEvent.java
│                       │   ├── ConferenceDestroyEvent.java
│                       │   ├── ConferenceJoinEvent.java
│                       │   ├── ConferenceLeaveEvent.java
│                       │   ├── ConferencePublishEvent.java
│                       │   ├── ConferenceUnpublishEvent.java
│                       │   ├── Conversation.java
│                       │   ├── DeleteMessageData.java
│                       │   ├── FilesPojo.java
│                       │   ├── ForwardDeviceMessageData.java
│                       │   ├── GetConversationFilesPojo.java
│                       │   ├── GetOnlineUserCountResult.java
│                       │   ├── GetOnlineUserRequest.java
│                       │   ├── GetOnlineUserResult.java
│                       │   ├── GetUserFilesPojo.java
│                       │   ├── GetUserSessionResult.java
│                       │   ├── GroupMemberUpdateEvent.java
│                       │   ├── GroupNotificationBinaryContent.java
│                       │   ├── GroupUpdateEvent.java
│                       │   ├── HealthCheckResult.java
│                       │   ├── InputAddFriendRequest.java
│                       │   ├── InputAddGroupMember.java
│                       │   ├── InputApplicationGetUserInfo.java
│                       │   ├── InputBlacklistRequest.java
│                       │   ├── InputChannelId.java
│                       │   ├── InputChannelSubscribe.java
│                       │   ├── InputChatroomId.java
│                       │   ├── InputChatroomMute.java
│                       │   ├── InputClearUserMessages.java
│                       │   ├── InputConferenceRequest.java
│                       │   ├── InputCountOffset.java
│                       │   ├── InputCreateChannel.java
│                       │   ├── InputCreateChatroom.java
│                       │   ├── InputCreateDevice.java
│                       │   ├── InputCreateGroup.java
│                       │   ├── InputCreateRobot.java
│                       │   ├── InputDestoryChatroom.java
│                       │   ├── InputDestroyUser.java
│                       │   ├── InputDeviceId.java
│                       │   ├── InputDismissGroup.java
│                       │   ├── InputGetAlias.java
│                       │   ├── InputGetChannelInfo.java
│                       │   ├── InputGetChatroomInfo.java
│                       │   ├── InputGetConvReadTime.java
│                       │   ├── InputGetFriendList.java
│                       │   ├── InputGetGroup.java
│                       │   ├── InputGetGroupMember.java
│                       │   ├── InputGetPresignedUploadUrl.java
│                       │   ├── InputGetToken.java
│                       │   ├── InputGetUserGroupByType.java
│                       │   ├── InputGetUserInfo.java
│                       │   ├── InputGetUserList.java
│                       │   ├── InputGetUserSK.java
│                       │   ├── InputGroupBase.java
│                       │   ├── InputHandleFriendRequest.java
│                       │   ├── InputIntValue.java
│                       │   ├── InputKickoffGroupMember.java
│                       │   ├── InputMessageUid.java
│                       │   ├── InputModifyChannelInfo.java
│                       │   ├── InputModifyGroupInfo.java
│                       │   ├── InputMuteGroupMember.java
│                       │   ├── InputOutputDomainInfo.java
│                       │   ├── InputOutputDomainInfoList.java
│                       │   ├── InputOutputSensitiveWords.java
│                       │   ├── InputOutputUserBlockStatus.java
│                       │   ├── InputOutputUserInfo.java
│                       │   ├── InputQuitGroup.java
│                       │   ├── InputRobotId.java
│                       │   ├── InputSetChatroomBlacklist.java
│                       │   ├── InputSetChatroomManager.java
│                       │   ├── InputSetGroupManager.java
│                       │   ├── InputSetGroupMemberAlias.java
│                       │   ├── InputSetGroupMemberExtra.java
│                       │   ├── InputStringList.java
│                       │   ├── InputStringValue.java
│                       │   ├── InputSubscribeChannel.java
│                       │   ├── InputTransferGroup.java
│                       │   ├── InputUpdateAlias.java
│                       │   ├── InputUpdateFriendExtra.java
│                       │   ├── InputUpdateFriendStatusRequest.java
│                       │   ├── InputUpdateUserInfo.java
│                       │   ├── InputUserConversation.java
│                       │   ├── InputUserId.java
│                       │   ├── InputUserLogin.java
│                       │   ├── IntStringPairPojo.java
│                       │   ├── LongPojo.java
│                       │   ├── MessagePayload.java
│                       │   ├── MultiMessageResult.java
│                       │   ├── MulticastMessageData.java
│                       │   ├── MyInfoType.java
│                       │   ├── OutputApplicationConfigData.java
│                       │   ├── OutputApplicationUserInfo.java
│                       │   ├── OutputBooleanValue.java
│                       │   ├── OutputChatroomBlackInfos.java
│                       │   ├── OutputCheckUserOnline.java
│                       │   ├── OutputClient.java
│                       │   ├── OutputCreateChannel.java
│                       │   ├── OutputCreateChatroom.java
│                       │   ├── OutputCreateDevice.java
│                       │   ├── OutputCreateGroupResult.java
│                       │   ├── OutputCreateRobot.java
│                       │   ├── OutputCreateUser.java
│                       │   ├── OutputDevice.java
│                       │   ├── OutputDeviceHost.java
│                       │   ├── OutputDeviceList.java
│                       │   ├── OutputGetAlias.java
│                       │   ├── OutputGetChannelInfo.java
│                       │   ├── OutputGetChatroomInfo.java
│                       │   ├── OutputGetFriendList.java
│                       │   ├── OutputGetIMTokenData.java
│                       │   ├── OutputGetUserList.java
│                       │   ├── OutputGroupIds.java
│                       │   ├── OutputGroupMemberList.java
│                       │   ├── OutputLoginData.java
│                       │   ├── OutputMessageData.java
│                       │   ├── OutputNotifyChannelSubscribeStatus.java
│                       │   ├── OutputPresignedUploadUrl.java
│                       │   ├── OutputReadData.java
│                       │   ├── OutputRecallMessageData.java
│                       │   ├── OutputRobot.java
│                       │   ├── OutputRouteData.java
│                       │   ├── OutputStringList.java
│                       │   ├── OutputTimestamp.java
│                       │   ├── OutputUserBlockStatusList.java
│                       │   ├── OutputUserChatroom.java
│                       │   ├── OutputUserInfoList.java
│                       │   ├── OutputUserStatus.java
│                       │   ├── PojoChannelMenu.java
│                       │   ├── PojoConferenceCreate.java
│                       │   ├── PojoConferenceInfo.java
│                       │   ├── PojoConferenceInfoList.java
│                       │   ├── PojoConferenceParticipant.java
│                       │   ├── PojoConferenceParticipantList.java
│                       │   ├── PojoConferenceRecording.java
│                       │   ├── PojoConferenceRoomId.java
│                       │   ├── PojoConferenceRtpForwardReq.java
│                       │   ├── PojoConferenceRtpForwarders.java
│                       │   ├── PojoConferenceStopRtpForwardReq.java
│                       │   ├── PojoGroup.java
│                       │   ├── PojoGroupInfo.java
│                       │   ├── PojoGroupInfoList.java
│                       │   ├── PojoGroupMember.java
│                       │   ├── RecallMessageData.java
│                       │   ├── RecallMultiCastMessageData.java
│                       │   ├── RelationPojo.java
│                       │   ├── RelationUpdateEvent.java
│                       │   ├── ReplyMessageData.java
│                       │   ├── RepublishChannelMessageData.java
│                       │   ├── RobotCallbackPojo.java
│                       │   ├── SendChannelMessageData.java
│                       │   ├── SendMessageData.java
│                       │   ├── SendMessageResult.java
│                       │   ├── StringPairPojo.java
│                       │   ├── SystemSettingPojo.java
│                       │   ├── UpdateMessageContentData.java
│                       │   ├── UserOnlineStatus.java
│                       │   ├── UserSettingPojo.java
│                       │   ├── mesh/
│                       │   │   ├── MeshRestResult.java
│                       │   │   ├── PojoAddFriendReq.java
│                       │   │   ├── PojoAddGroupMember.java
│                       │   │   ├── PojoAddJoinGroupRequest.java
│                       │   │   ├── PojoDeleteFriend.java
│                       │   │   ├── PojoDismissGroup.java
│                       │   │   ├── PojoDomainPingRequest.java
│                       │   │   ├── PojoDomainPingResponse.java
│                       │   │   ├── PojoGroupUpdated.java
│                       │   │   ├── PojoHandleFriendRequestReq.java
│                       │   │   ├── PojoKickoffGroupMember.java
│                       │   │   ├── PojoModifyGroupInfo.java
│                       │   │   ├── PojoPublishMessageReq.java
│                       │   │   ├── PojoQuitGroup.java
│                       │   │   ├── PojoRecallMessageReq.java
│                       │   │   ├── PojoSearchUserReq.java
│                       │   │   ├── PojoSearchUserRes.java
│                       │   │   ├── PojoSendMessageReq.java
│                       │   │   ├── PojoString.java
│                       │   │   ├── PojoStringList.java
│                       │   │   ├── PojoTransferGroup.java
│                       │   │   ├── PojoUserConferenceEvent.java
│                       │   │   ├── PojoUserConferenceRequest.java
│                       │   │   └── PojoUserConferenceResponse.java
│                       │   └── moments/
│                       │       ├── CommentMsgPojo.java
│                       │       ├── CommentPojo.java
│                       │       ├── FeedPojo.java
│                       │       ├── FeedsPojo.java
│                       │       ├── IdPojo.java
│                       │       ├── MediaEntry.java
│                       │       ├── MomentProfilePojo.java
│                       │       ├── PostFeedResult.java
│                       │       ├── PullCommentsRequestPojo.java
│                       │       ├── PullFeedRequestPojo.java
│                       │       ├── PullOneFeedRequestPojo.java
│                       │       ├── PullProfileRequestPojo.java
│                       │       ├── PushProfileListRequestPojo.java
│                       │       └── PushProfileValueRequestPojo.java
│                       └── proto/
│                           ├── ProtoConstants.java
│                           └── WFCMessage.java
├── distribution/
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── assembly/
│           │   └── assembly.xml
│           ├── checker/
│           │   └── README.md
│           ├── deb/
│           │   └── control/
│           │       ├── control
│           │       ├── postinst
│           │       └── postrm
│           ├── files/
│           │   └── README.txt
│           ├── resources/
│           │   ├── c3p0-config.xml
│           │   ├── hazelcast.xml
│           │   ├── log4j2.xml
│           │   └── wildfirechat.conf
│           ├── rpm/
│           │   ├── install.sh
│           │   └── uninstall.sh
│           └── scripts/
│               ├── stop.sh
│               ├── wildfirechat.bat
│               └── wildfirechat.sh
├── docker/
│   ├── Dockerfile
│   └── README.md
├── flyway_repaire_migrate_38.sql
├── license-eplv10-aslv20.html
├── license_moquette.txt
├── pom.xml
├── release_note.md
├── sdk/
│   ├── README.md
│   ├── pom.xml
│   ├── sdk_readme.txt
│   └── src/
│       └── main/
│           └── java/
│               ├── cn/
│               │   └── wildfirechat/
│               │       └── sdk/
│               │           ├── AdminConfig.java
│               │           ├── ChannelAdmin.java
│               │           ├── ChannelServiceApi.java
│               │           ├── ChatroomAdmin.java
│               │           ├── ConferenceAdmin.java
│               │           ├── GeneralAdmin.java
│               │           ├── GenerateTestData.java
│               │           ├── GroupAdmin.java
│               │           ├── Main.java
│               │           ├── MeshAdmin.java
│               │           ├── MessageAdmin.java
│               │           ├── MomentsAdmin.java
│               │           ├── RelationAdmin.java
│               │           ├── RobotService.java
│               │           ├── SensitiveAdmin.java
│               │           ├── UserAdmin.java
│               │           ├── messagecontent/
│               │           │   ├── ArticlesMessageContent.java
│               │           │   ├── CallStartMessageContent.java
│               │           │   ├── CardMessageContent.java
│               │           │   ├── DeleteMessageContent.java
│               │           │   ├── FileMessageContent.java
│               │           │   ├── ImageMessageContent.java
│               │           │   ├── LinkMessageContent.java
│               │           │   ├── LocationMessageContent.java
│               │           │   ├── MediaMessageContent.java
│               │           │   ├── MessageContent.java
│               │           │   ├── MessageContentFactory.java
│               │           │   ├── MultiCallOngoingMessageContent.java
│               │           │   ├── NotDeliveredMessageContent.java
│               │           │   ├── PTTSoundMessageContent.java
│               │           │   ├── RecallMessageContent.java
│               │           │   ├── RichNotificationMessageContent.java
│               │           │   ├── SoundMessageContent.java
│               │           │   ├── StickerMessageContent.java
│               │           │   ├── StreamTextGeneratedMessageContent.java
│               │           │   ├── StreamTextGeneratingMessageContent.java
│               │           │   ├── TextMessageContent.java
│               │           │   ├── TipNotificationMessageContent.java
│               │           │   ├── TypingMessageContent.java
│               │           │   ├── UnknownMessageContent.java
│               │           │   └── VideoMessageContent.java
│               │           ├── model/
│               │           │   ├── IMResult.java
│               │           │   ├── Message.java
│               │           │   └── QuoteInfo.java
│               │           └── utilities/
│               │               ├── AdminHttpUtils.java
│               │               ├── ChannelHttpUtils.java
│               │               ├── ClassUtil.java
│               │               ├── HttpUtils.java
│               │               ├── JsonUtils.java
│               │               └── RobotHttpUtils.java
│               └── ikidou/
│                   └── reflect/
│                       ├── TypeBuilder.java
│                       ├── TypeToken.java
│                       ├── exception/
│                       │   └── TypeException.java
│                       └── typeimpl/
│                           ├── ParameterizedTypeImpl.java
│                           └── WildcardTypeImpl.java
└── systemd/
    ├── README.md
    └── im-server.service
Download .txt
Showing preview only (1,056K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (12063 symbols across 633 files)

FILE: broker/migrate/h2/V13__create_settings_table.sql
  type `t_settings` (line 3) | CREATE TABLE `t_settings` (

FILE: broker/migrate/h2/V25__create_chatroom_blacklist_manager.sql
  type `t_chatroom_blacklist` (line 3) | CREATE TABLE `t_chatroom_blacklist` (
  type `t_chatroom_manager` (line 14) | CREATE TABLE `t_chatroom_manager` (

FILE: broker/migrate/h2/V27__create_device_table.sql
  type `t_device` (line 5) | CREATE TABLE `t_device` (
  type `t_user_device` (line 16) | CREATE TABLE `t_user_device` (

FILE: broker/migrate/h2/V29__create_receipt_table.sql
  type `t_read_report` (line 3) | CREATE TABLE `t_read_report` (
  type `t_user_read_report` (line 14) | CREATE TABLE `t_user_read_report` (
  type `t_delivery_report` (line 25) | CREATE TABLE `t_delivery_report` (
  type `t_user_delivery_report` (line 34) | CREATE TABLE `t_user_delivery_report` (

FILE: broker/migrate/h2/V2__create_table.sql
  type `t_group` (line 4) | CREATE TABLE `t_group` (
  type `t_group_member` (line 20) | CREATE TABLE `t_group_member` (
  type `t_user` (line 31) | CREATE TABLE `t_user` (
  type `t_user_status` (line 56) | CREATE TABLE `t_user_status` (
  type `t_friend_request` (line 65) | CREATE TABLE `t_friend_request` (
  type `t_friend` (line 78) | CREATE TABLE `t_friend` (
  type `t_user_setting` (line 88) | CREATE TABLE `t_user_setting` (
  type `t_id_generator` (line 99) | CREATE TABLE `t_id_generator` (
  type `t_channel` (line 106) | CREATE TABLE `t_channel` (
  type `t_channel_listener` (line 124) | CREATE TABLE `t_channel_listener` (
  type `t_user_session` (line 134) | CREATE TABLE `t_user_session` (
  type `t_robot` (line 156) | CREATE TABLE `t_robot` (
  type `t_thing` (line 171) | CREATE TABLE `t_thing` (
  type `t_chatroom` (line 184) | CREATE TABLE `t_chatroom` (
  type `t_sensitiveword` (line 197) | CREATE TABLE `t_sensitiveword` (

FILE: broker/migrate/h2/V34__create_files_table.sql
  type `t_file` (line 2) | CREATE TABLE `t_file` (

FILE: broker/migrate/h2/V3__create_sharding_table.sql
  type `t_messages` (line 3) | CREATE TABLE `t_messages` (
  type `t_user_messages` (line 17) | CREATE TABLE `t_user_messages` (

FILE: broker/migrate/h2/V42__create_secret_chat_table.sql
  type `t_secret_chat` (line 3) | CREATE TABLE `t_secret_chat` (

FILE: broker/migrate/h2/V47__create_super_group.sql
  type `t_group_messages` (line 4) | CREATE TABLE `t_group_messages` (

FILE: broker/migrate/h2/V49__add_domain_table.sql
  type `t_domain` (line 2) | CREATE TABLE `t_domain` (

FILE: broker/migrate/h2/V50__update_group_member_index.sql
  type `user_gid_dt_index` (line 1) | CREATE INDEX `user_gid_dt_index` ON `t_group_member` (`_gid`, `_dt`)

FILE: broker/migrate/h2/V54__add_group_member_index.sql
  type `user_gid_type_index` (line 1) | CREATE INDEX `user_gid_type_index` ON `t_group_member` (`_gid`, `_type`)

FILE: broker/migrate/h2/V55__create_conference_table.sql
  type `t_conference` (line 3) | CREATE TABLE `t_conference` (

FILE: broker/migrate/h2/V56__create_join_group_request_table.sql
  type `t_join_group_request` (line 2) | CREATE TABLE `t_join_group_request` (

FILE: broker/migrate/h2/V9__add_sensitive_messages.sql
  type `t_sensitive_messages` (line 3) | CREATE TABLE `t_sensitive_messages` (

FILE: broker/migrate/mysql/V13__create_session_table.sql
  type `t_session` (line 3) | CREATE TABLE `t_session` (

FILE: broker/migrate/mysql/V18__create_settings_table.sql
  type `t_settings` (line 3) | CREATE TABLE `t_settings` (

FILE: broker/migrate/mysql/V2__create_table.sql
  type `t_messages` (line 3) | CREATE TABLE `t_messages` (
  type `t_user_messages` (line 21) | CREATE TABLE `t_user_messages` (
  type `t_group` (line 35) | CREATE TABLE `t_group` (
  type `t_group_member` (line 54) | CREATE TABLE `t_group_member` (
  type `t_user` (line 68) | CREATE TABLE `t_user` (
  type `t_user_status` (line 97) | CREATE TABLE `t_user_status` (
  type `t_friend_request` (line 109) | CREATE TABLE `t_friend_request` (
  type `t_friend` (line 126) | CREATE TABLE `t_friend` (
  type `t_user_setting` (line 139) | CREATE TABLE `t_user_setting` (
  type `t_id_generator` (line 153) | CREATE TABLE `t_id_generator` (
  type `t_channel` (line 162) | CREATE TABLE `t_channel` (
  type `t_channel_listener` (line 183) | CREATE TABLE `t_channel_listener` (
  type `t_user_session` (line 195) | CREATE TABLE `t_user_session` (
  type `t_robot` (line 219) | CREATE TABLE `t_robot` (
  type `t_thing` (line 237) | CREATE TABLE `t_thing` (
  type `t_chatroom` (line 254) | CREATE TABLE `t_chatroom` (
  type `t_sensitiveword` (line 270) | CREATE TABLE `t_sensitiveword` (

FILE: broker/migrate/mysql/V30__create_chatroom_blacklist_manager.sql
  type `t_chatroom_blacklist` (line 3) | CREATE TABLE `t_chatroom_blacklist` (
  type `t_chatroom_manager` (line 17) | CREATE TABLE `t_chatroom_manager` (

FILE: broker/migrate/mysql/V32__create_device_table.sql
  type `t_device` (line 5) | CREATE TABLE `t_device` (
  type `t_user_device` (line 19) | CREATE TABLE `t_user_device` (

FILE: broker/migrate/mysql/V34__create_receipt_table.sql
  type `t_read_report` (line 3) | CREATE TABLE `t_read_report` (
  type `t_user_read_report` (line 17) | CREATE TABLE `t_user_read_report` (
  type `t_delivery_report` (line 31) | CREATE TABLE `t_delivery_report` (
  type `t_user_delivery_report` (line 43) | CREATE TABLE `t_user_delivery_report` (

FILE: broker/migrate/mysql/V39__create_files_table.sql
  type `t_file` (line 2) | CREATE TABLE `t_file` (

FILE: broker/migrate/mysql/V3__create_sharding_table.sql
  type `t_messages_0` (line 3) | CREATE TABLE `t_messages_0` (
  type `t_messages_1` (line 21) | CREATE TABLE `t_messages_1` (
  type `t_messages_2` (line 39) | CREATE TABLE `t_messages_2` (
  type `t_messages_3` (line 56) | CREATE TABLE `t_messages_3` (
  type `t_messages_4` (line 74) | CREATE TABLE `t_messages_4` (
  type `t_messages_5` (line 92) | CREATE TABLE `t_messages_5` (
  type `t_messages_6` (line 109) | CREATE TABLE `t_messages_6` (
  type `t_messages_7` (line 127) | CREATE TABLE `t_messages_7` (
  type `t_messages_8` (line 145) | CREATE TABLE `t_messages_8` (
  type `t_messages_9` (line 162) | CREATE TABLE `t_messages_9` (
  type `t_messages_10` (line 180) | CREATE TABLE `t_messages_10` (
  type `t_messages_11` (line 198) | CREATE TABLE `t_messages_11` (
  type `t_messages_12` (line 215) | CREATE TABLE `t_messages_12` (
  type `t_messages_13` (line 233) | CREATE TABLE `t_messages_13` (
  type `t_messages_14` (line 251) | CREATE TABLE `t_messages_14` (
  type `t_messages_15` (line 268) | CREATE TABLE `t_messages_15` (
  type `t_messages_16` (line 286) | CREATE TABLE `t_messages_16` (
  type `t_messages_17` (line 304) | CREATE TABLE `t_messages_17` (
  type `t_messages_18` (line 321) | CREATE TABLE `t_messages_18` (
  type `t_messages_19` (line 339) | CREATE TABLE `t_messages_19` (
  type `t_messages_20` (line 357) | CREATE TABLE `t_messages_20` (
  type `t_messages_21` (line 374) | CREATE TABLE `t_messages_21` (
  type `t_messages_22` (line 392) | CREATE TABLE `t_messages_22` (
  type `t_messages_23` (line 410) | CREATE TABLE `t_messages_23` (
  type `t_messages_24` (line 427) | CREATE TABLE `t_messages_24` (
  type `t_messages_25` (line 445) | CREATE TABLE `t_messages_25` (
  type `t_messages_26` (line 463) | CREATE TABLE `t_messages_26` (
  type `t_messages_27` (line 480) | CREATE TABLE `t_messages_27` (
  type `t_messages_28` (line 498) | CREATE TABLE `t_messages_28` (
  type `t_messages_29` (line 516) | CREATE TABLE `t_messages_29` (
  type `t_messages_30` (line 533) | CREATE TABLE `t_messages_30` (
  type `t_messages_31` (line 551) | CREATE TABLE `t_messages_31` (
  type `t_messages_32` (line 569) | CREATE TABLE `t_messages_32` (
  type `t_messages_33` (line 586) | CREATE TABLE `t_messages_33` (
  type `t_messages_34` (line 604) | CREATE TABLE `t_messages_34` (
  type `t_messages_35` (line 622) | CREATE TABLE `t_messages_35` (
  type `t_user_messages_0` (line 640) | CREATE TABLE `t_user_messages_0` (
  type `t_user_messages_1` (line 654) | CREATE TABLE `t_user_messages_1` (
  type `t_user_messages_2` (line 667) | CREATE TABLE `t_user_messages_2` (
  type `t_user_messages_3` (line 680) | CREATE TABLE `t_user_messages_3` (
  type `t_user_messages_4` (line 694) | CREATE TABLE `t_user_messages_4` (
  type `t_user_messages_5` (line 707) | CREATE TABLE `t_user_messages_5` (
  type `t_user_messages_6` (line 721) | CREATE TABLE `t_user_messages_6` (
  type `t_user_messages_7` (line 734) | CREATE TABLE `t_user_messages_7` (
  type `t_user_messages_8` (line 747) | CREATE TABLE `t_user_messages_8` (
  type `t_user_messages_9` (line 761) | CREATE TABLE `t_user_messages_9` (
  type `t_user_messages_10` (line 774) | CREATE TABLE `t_user_messages_10` (
  type `t_user_messages_11` (line 788) | CREATE TABLE `t_user_messages_11` (
  type `t_user_messages_12` (line 801) | CREATE TABLE `t_user_messages_12` (
  type `t_user_messages_13` (line 814) | CREATE TABLE `t_user_messages_13` (
  type `t_user_messages_14` (line 828) | CREATE TABLE `t_user_messages_14` (
  type `t_user_messages_15` (line 841) | CREATE TABLE `t_user_messages_15` (
  type `t_user_messages_16` (line 855) | CREATE TABLE `t_user_messages_16` (
  type `t_user_messages_17` (line 868) | CREATE TABLE `t_user_messages_17` (
  type `t_user_messages_18` (line 881) | CREATE TABLE `t_user_messages_18` (
  type `t_user_messages_19` (line 895) | CREATE TABLE `t_user_messages_19` (
  type `t_user_messages_20` (line 908) | CREATE TABLE `t_user_messages_20` (
  type `t_user_messages_21` (line 922) | CREATE TABLE `t_user_messages_21` (
  type `t_user_messages_22` (line 935) | CREATE TABLE `t_user_messages_22` (
  type `t_user_messages_23` (line 948) | CREATE TABLE `t_user_messages_23` (
  type `t_user_messages_24` (line 962) | CREATE TABLE `t_user_messages_24` (
  type `t_user_messages_25` (line 975) | CREATE TABLE `t_user_messages_25` (
  type `t_user_messages_26` (line 989) | CREATE TABLE `t_user_messages_26` (
  type `t_user_messages_27` (line 1002) | CREATE TABLE `t_user_messages_27` (
  type `t_user_messages_28` (line 1015) | CREATE TABLE `t_user_messages_28` (
  type `t_user_messages_29` (line 1029) | CREATE TABLE `t_user_messages_29` (
  type `t_user_messages_30` (line 1042) | CREATE TABLE `t_user_messages_30` (
  type `t_user_messages_31` (line 1056) | CREATE TABLE `t_user_messages_31` (
  type `t_user_messages_32` (line 1069) | CREATE TABLE `t_user_messages_32` (
  type `t_user_messages_33` (line 1082) | CREATE TABLE `t_user_messages_33` (
  type `t_user_messages_34` (line 1096) | CREATE TABLE `t_user_messages_34` (
  type `t_user_messages_35` (line 1109) | CREATE TABLE `t_user_messages_35` (
  type `t_user_messages_36` (line 1123) | CREATE TABLE `t_user_messages_36` (
  type `t_user_messages_37` (line 1136) | CREATE TABLE `t_user_messages_37` (
  type `t_user_messages_38` (line 1149) | CREATE TABLE `t_user_messages_38` (
  type `t_user_messages_39` (line 1163) | CREATE TABLE `t_user_messages_39` (
  type `t_user_messages_40` (line 1176) | CREATE TABLE `t_user_messages_40` (
  type `t_user_messages_41` (line 1190) | CREATE TABLE `t_user_messages_41` (
  type `t_user_messages_42` (line 1203) | CREATE TABLE `t_user_messages_42` (
  type `t_user_messages_43` (line 1216) | CREATE TABLE `t_user_messages_43` (
  type `t_user_messages_44` (line 1230) | CREATE TABLE `t_user_messages_44` (
  type `t_user_messages_45` (line 1243) | CREATE TABLE `t_user_messages_45` (
  type `t_user_messages_46` (line 1257) | CREATE TABLE `t_user_messages_46` (
  type `t_user_messages_47` (line 1270) | CREATE TABLE `t_user_messages_47` (
  type `t_user_messages_48` (line 1283) | CREATE TABLE `t_user_messages_48` (
  type `t_user_messages_49` (line 1297) | CREATE TABLE `t_user_messages_49` (
  type `t_user_messages_50` (line 1310) | CREATE TABLE `t_user_messages_50` (
  type `t_user_messages_51` (line 1324) | CREATE TABLE `t_user_messages_51` (
  type `t_user_messages_52` (line 1337) | CREATE TABLE `t_user_messages_52` (
  type `t_user_messages_53` (line 1350) | CREATE TABLE `t_user_messages_53` (
  type `t_user_messages_54` (line 1364) | CREATE TABLE `t_user_messages_54` (
  type `t_user_messages_55` (line 1377) | CREATE TABLE `t_user_messages_55` (
  type `t_user_messages_56` (line 1391) | CREATE TABLE `t_user_messages_56` (
  type `t_user_messages_57` (line 1404) | CREATE TABLE `t_user_messages_57` (
  type `t_user_messages_58` (line 1417) | CREATE TABLE `t_user_messages_58` (
  type `t_user_messages_59` (line 1431) | CREATE TABLE `t_user_messages_59` (
  type `t_user_messages_60` (line 1444) | CREATE TABLE `t_user_messages_60` (
  type `t_user_messages_61` (line 1458) | CREATE TABLE `t_user_messages_61` (
  type `t_user_messages_62` (line 1471) | CREATE TABLE `t_user_messages_62` (
  type `t_user_messages_63` (line 1484) | CREATE TABLE `t_user_messages_63` (
  type `t_user_messages_64` (line 1498) | CREATE TABLE `t_user_messages_64` (
  type `t_user_messages_65` (line 1511) | CREATE TABLE `t_user_messages_65` (
  type `t_user_messages_66` (line 1525) | CREATE TABLE `t_user_messages_66` (
  type `t_user_messages_67` (line 1538) | CREATE TABLE `t_user_messages_67` (
  type `t_user_messages_68` (line 1551) | CREATE TABLE `t_user_messages_68` (
  type `t_user_messages_69` (line 1565) | CREATE TABLE `t_user_messages_69` (
  type `t_user_messages_70` (line 1578) | CREATE TABLE `t_user_messages_70` (
  type `t_user_messages_71` (line 1592) | CREATE TABLE `t_user_messages_71` (
  type `t_user_messages_72` (line 1605) | CREATE TABLE `t_user_messages_72` (
  type `t_user_messages_73` (line 1618) | CREATE TABLE `t_user_messages_73` (
  type `t_user_messages_74` (line 1632) | CREATE TABLE `t_user_messages_74` (
  type `t_user_messages_75` (line 1645) | CREATE TABLE `t_user_messages_75` (
  type `t_user_messages_76` (line 1659) | CREATE TABLE `t_user_messages_76` (
  type `t_user_messages_77` (line 1672) | CREATE TABLE `t_user_messages_77` (
  type `t_user_messages_78` (line 1685) | CREATE TABLE `t_user_messages_78` (
  type `t_user_messages_79` (line 1699) | CREATE TABLE `t_user_messages_79` (
  type `t_user_messages_80` (line 1712) | CREATE TABLE `t_user_messages_80` (
  type `t_user_messages_81` (line 1726) | CREATE TABLE `t_user_messages_81` (
  type `t_user_messages_82` (line 1739) | CREATE TABLE `t_user_messages_82` (
  type `t_user_messages_83` (line 1752) | CREATE TABLE `t_user_messages_83` (
  type `t_user_messages_84` (line 1766) | CREATE TABLE `t_user_messages_84` (
  type `t_user_messages_85` (line 1779) | CREATE TABLE `t_user_messages_85` (
  type `t_user_messages_86` (line 1793) | CREATE TABLE `t_user_messages_86` (
  type `t_user_messages_87` (line 1806) | CREATE TABLE `t_user_messages_87` (
  type `t_user_messages_88` (line 1819) | CREATE TABLE `t_user_messages_88` (
  type `t_user_messages_89` (line 1833) | CREATE TABLE `t_user_messages_89` (
  type `t_user_messages_90` (line 1846) | CREATE TABLE `t_user_messages_90` (
  type `t_user_messages_91` (line 1860) | CREATE TABLE `t_user_messages_91` (
  type `t_user_messages_92` (line 1873) | CREATE TABLE `t_user_messages_92` (
  type `t_user_messages_93` (line 1886) | CREATE TABLE `t_user_messages_93` (
  type `t_user_messages_94` (line 1900) | CREATE TABLE `t_user_messages_94` (
  type `t_user_messages_95` (line 1913) | CREATE TABLE `t_user_messages_95` (
  type `t_user_messages_96` (line 1927) | CREATE TABLE `t_user_messages_96` (
  type `t_user_messages_97` (line 1940) | CREATE TABLE `t_user_messages_97` (
  type `t_user_messages_98` (line 1953) | CREATE TABLE `t_user_messages_98` (
  type `t_user_messages_99` (line 1967) | CREATE TABLE `t_user_messages_99` (
  type `t_user_messages_100` (line 1980) | CREATE TABLE `t_user_messages_100` (
  type `t_user_messages_101` (line 1994) | CREATE TABLE `t_user_messages_101` (
  type `t_user_messages_102` (line 2007) | CREATE TABLE `t_user_messages_102` (
  type `t_user_messages_103` (line 2020) | CREATE TABLE `t_user_messages_103` (
  type `t_user_messages_104` (line 2034) | CREATE TABLE `t_user_messages_104` (
  type `t_user_messages_105` (line 2047) | CREATE TABLE `t_user_messages_105` (
  type `t_user_messages_106` (line 2061) | CREATE TABLE `t_user_messages_106` (
  type `t_user_messages_107` (line 2074) | CREATE TABLE `t_user_messages_107` (
  type `t_user_messages_108` (line 2087) | CREATE TABLE `t_user_messages_108` (
  type `t_user_messages_109` (line 2101) | CREATE TABLE `t_user_messages_109` (
  type `t_user_messages_110` (line 2114) | CREATE TABLE `t_user_messages_110` (
  type `t_user_messages_111` (line 2128) | CREATE TABLE `t_user_messages_111` (
  type `t_user_messages_112` (line 2141) | CREATE TABLE `t_user_messages_112` (
  type `t_user_messages_113` (line 2154) | CREATE TABLE `t_user_messages_113` (
  type `t_user_messages_114` (line 2168) | CREATE TABLE `t_user_messages_114` (
  type `t_user_messages_115` (line 2181) | CREATE TABLE `t_user_messages_115` (
  type `t_user_messages_116` (line 2195) | CREATE TABLE `t_user_messages_116` (
  type `t_user_messages_117` (line 2208) | CREATE TABLE `t_user_messages_117` (
  type `t_user_messages_118` (line 2221) | CREATE TABLE `t_user_messages_118` (
  type `t_user_messages_119` (line 2235) | CREATE TABLE `t_user_messages_119` (
  type `t_user_messages_120` (line 2248) | CREATE TABLE `t_user_messages_120` (
  type `t_user_messages_121` (line 2262) | CREATE TABLE `t_user_messages_121` (
  type `t_user_messages_122` (line 2275) | CREATE TABLE `t_user_messages_122` (
  type `t_user_messages_123` (line 2288) | CREATE TABLE `t_user_messages_123` (
  type `t_user_messages_124` (line 2302) | CREATE TABLE `t_user_messages_124` (
  type `t_user_messages_125` (line 2315) | CREATE TABLE `t_user_messages_125` (
  type `t_user_messages_126` (line 2329) | CREATE TABLE `t_user_messages_126` (
  type `t_user_messages_127` (line 2342) | CREATE TABLE `t_user_messages_127` (

FILE: broker/migrate/mysql/V49__create_secret_chat_table.sql
  type `t_secret_chat` (line 3) | CREATE TABLE `t_secret_chat` (

FILE: broker/migrate/mysql/V54__create_super_group.sql
  type `t_group_messages` (line 4) | CREATE TABLE `t_group_messages` (
  type `t_group_messages_0` (line 25) | CREATE TABLE `t_group_messages_0` (
  type `t_group_messages_1` (line 46) | CREATE TABLE `t_group_messages_1` (
  type `t_group_messages_2` (line 67) | CREATE TABLE `t_group_messages_2` (
  type `t_group_messages_3` (line 88) | CREATE TABLE `t_group_messages_3` (
  type `t_group_messages_4` (line 109) | CREATE TABLE `t_group_messages_4` (
  type `t_group_messages_5` (line 130) | CREATE TABLE `t_group_messages_5` (
  type `t_group_messages_6` (line 151) | CREATE TABLE `t_group_messages_6` (
  type `t_group_messages_7` (line 172) | CREATE TABLE `t_group_messages_7` (
  type `t_group_messages_8` (line 193) | CREATE TABLE `t_group_messages_8` (
  type `t_group_messages_9` (line 214) | CREATE TABLE `t_group_messages_9` (
  type `t_group_messages_10` (line 235) | CREATE TABLE `t_group_messages_10` (
  type `t_group_messages_11` (line 256) | CREATE TABLE `t_group_messages_11` (
  type `t_group_messages_12` (line 277) | CREATE TABLE `t_group_messages_12` (
  type `t_group_messages_13` (line 298) | CREATE TABLE `t_group_messages_13` (
  type `t_group_messages_14` (line 319) | CREATE TABLE `t_group_messages_14` (
  type `t_group_messages_15` (line 340) | CREATE TABLE `t_group_messages_15` (
  type `t_group_messages_16` (line 361) | CREATE TABLE `t_group_messages_16` (
  type `t_group_messages_17` (line 382) | CREATE TABLE `t_group_messages_17` (
  type `t_group_messages_18` (line 403) | CREATE TABLE `t_group_messages_18` (
  type `t_group_messages_19` (line 424) | CREATE TABLE `t_group_messages_19` (
  type `t_group_messages_20` (line 447) | CREATE TABLE `t_group_messages_20` (
  type `t_group_messages_21` (line 468) | CREATE TABLE `t_group_messages_21` (
  type `t_group_messages_22` (line 489) | CREATE TABLE `t_group_messages_22` (
  type `t_group_messages_23` (line 510) | CREATE TABLE `t_group_messages_23` (
  type `t_group_messages_24` (line 531) | CREATE TABLE `t_group_messages_24` (
  type `t_group_messages_25` (line 552) | CREATE TABLE `t_group_messages_25` (
  type `t_group_messages_26` (line 573) | CREATE TABLE `t_group_messages_26` (
  type `t_group_messages_27` (line 594) | CREATE TABLE `t_group_messages_27` (
  type `t_group_messages_28` (line 615) | CREATE TABLE `t_group_messages_28` (
  type `t_group_messages_29` (line 636) | CREATE TABLE `t_group_messages_29` (
  type `t_group_messages_30` (line 658) | CREATE TABLE `t_group_messages_30` (
  type `t_group_messages_31` (line 679) | CREATE TABLE `t_group_messages_31` (
  type `t_group_messages_32` (line 700) | CREATE TABLE `t_group_messages_32` (
  type `t_group_messages_33` (line 721) | CREATE TABLE `t_group_messages_33` (
  type `t_group_messages_34` (line 742) | CREATE TABLE `t_group_messages_34` (
  type `t_group_messages_35` (line 763) | CREATE TABLE `t_group_messages_35` (
  type `t_group_messages_36` (line 784) | CREATE TABLE `t_group_messages_36` (
  type `t_group_messages_37` (line 805) | CREATE TABLE `t_group_messages_37` (
  type `t_group_messages_38` (line 826) | CREATE TABLE `t_group_messages_38` (
  type `t_group_messages_39` (line 847) | CREATE TABLE `t_group_messages_39` (
  type `t_group_messages_40` (line 869) | CREATE TABLE `t_group_messages_40` (
  type `t_group_messages_41` (line 890) | CREATE TABLE `t_group_messages_41` (
  type `t_group_messages_42` (line 911) | CREATE TABLE `t_group_messages_42` (
  type `t_group_messages_43` (line 932) | CREATE TABLE `t_group_messages_43` (
  type `t_group_messages_44` (line 953) | CREATE TABLE `t_group_messages_44` (
  type `t_group_messages_45` (line 974) | CREATE TABLE `t_group_messages_45` (
  type `t_group_messages_46` (line 995) | CREATE TABLE `t_group_messages_46` (
  type `t_group_messages_47` (line 1016) | CREATE TABLE `t_group_messages_47` (
  type `t_group_messages_48` (line 1037) | CREATE TABLE `t_group_messages_48` (
  type `t_group_messages_49` (line 1058) | CREATE TABLE `t_group_messages_49` (
  type `t_group_messages_50` (line 1080) | CREATE TABLE `t_group_messages_50` (
  type `t_group_messages_51` (line 1101) | CREATE TABLE `t_group_messages_51` (
  type `t_group_messages_52` (line 1122) | CREATE TABLE `t_group_messages_52` (
  type `t_group_messages_53` (line 1143) | CREATE TABLE `t_group_messages_53` (
  type `t_group_messages_54` (line 1164) | CREATE TABLE `t_group_messages_54` (
  type `t_group_messages_55` (line 1185) | CREATE TABLE `t_group_messages_55` (
  type `t_group_messages_56` (line 1206) | CREATE TABLE `t_group_messages_56` (
  type `t_group_messages_57` (line 1227) | CREATE TABLE `t_group_messages_57` (
  type `t_group_messages_58` (line 1248) | CREATE TABLE `t_group_messages_58` (
  type `t_group_messages_59` (line 1269) | CREATE TABLE `t_group_messages_59` (
  type `t_group_messages_60` (line 1291) | CREATE TABLE `t_group_messages_60` (
  type `t_group_messages_61` (line 1312) | CREATE TABLE `t_group_messages_61` (
  type `t_group_messages_62` (line 1333) | CREATE TABLE `t_group_messages_62` (
  type `t_group_messages_63` (line 1354) | CREATE TABLE `t_group_messages_63` (
  type `t_group_messages_64` (line 1375) | CREATE TABLE `t_group_messages_64` (
  type `t_group_messages_65` (line 1396) | CREATE TABLE `t_group_messages_65` (
  type `t_group_messages_66` (line 1417) | CREATE TABLE `t_group_messages_66` (
  type `t_group_messages_67` (line 1438) | CREATE TABLE `t_group_messages_67` (
  type `t_group_messages_68` (line 1459) | CREATE TABLE `t_group_messages_68` (
  type `t_group_messages_69` (line 1480) | CREATE TABLE `t_group_messages_69` (
  type `t_group_messages_70` (line 1502) | CREATE TABLE `t_group_messages_70` (
  type `t_group_messages_71` (line 1523) | CREATE TABLE `t_group_messages_71` (
  type `t_group_messages_72` (line 1544) | CREATE TABLE `t_group_messages_72` (
  type `t_group_messages_73` (line 1565) | CREATE TABLE `t_group_messages_73` (
  type `t_group_messages_74` (line 1586) | CREATE TABLE `t_group_messages_74` (
  type `t_group_messages_75` (line 1607) | CREATE TABLE `t_group_messages_75` (
  type `t_group_messages_76` (line 1628) | CREATE TABLE `t_group_messages_76` (
  type `t_group_messages_77` (line 1649) | CREATE TABLE `t_group_messages_77` (
  type `t_group_messages_78` (line 1670) | CREATE TABLE `t_group_messages_78` (
  type `t_group_messages_79` (line 1691) | CREATE TABLE `t_group_messages_79` (
  type `t_group_messages_80` (line 1713) | CREATE TABLE `t_group_messages_80` (
  type `t_group_messages_81` (line 1734) | CREATE TABLE `t_group_messages_81` (
  type `t_group_messages_82` (line 1755) | CREATE TABLE `t_group_messages_82` (
  type `t_group_messages_83` (line 1776) | CREATE TABLE `t_group_messages_83` (
  type `t_group_messages_84` (line 1797) | CREATE TABLE `t_group_messages_84` (
  type `t_group_messages_85` (line 1818) | CREATE TABLE `t_group_messages_85` (
  type `t_group_messages_86` (line 1839) | CREATE TABLE `t_group_messages_86` (
  type `t_group_messages_87` (line 1860) | CREATE TABLE `t_group_messages_87` (
  type `t_group_messages_88` (line 1881) | CREATE TABLE `t_group_messages_88` (
  type `t_group_messages_89` (line 1902) | CREATE TABLE `t_group_messages_89` (
  type `t_group_messages_90` (line 1924) | CREATE TABLE `t_group_messages_90` (
  type `t_group_messages_91` (line 1945) | CREATE TABLE `t_group_messages_91` (
  type `t_group_messages_92` (line 1966) | CREATE TABLE `t_group_messages_92` (
  type `t_group_messages_93` (line 1987) | CREATE TABLE `t_group_messages_93` (
  type `t_group_messages_94` (line 2008) | CREATE TABLE `t_group_messages_94` (
  type `t_group_messages_95` (line 2029) | CREATE TABLE `t_group_messages_95` (
  type `t_group_messages_96` (line 2050) | CREATE TABLE `t_group_messages_96` (
  type `t_group_messages_97` (line 2071) | CREATE TABLE `t_group_messages_97` (
  type `t_group_messages_98` (line 2092) | CREATE TABLE `t_group_messages_98` (
  type `t_group_messages_99` (line 2113) | CREATE TABLE `t_group_messages_99` (
  type `t_group_messages_100` (line 2135) | CREATE TABLE `t_group_messages_100` (
  type `t_group_messages_101` (line 2156) | CREATE TABLE `t_group_messages_101` (
  type `t_group_messages_102` (line 2177) | CREATE TABLE `t_group_messages_102` (
  type `t_group_messages_103` (line 2198) | CREATE TABLE `t_group_messages_103` (
  type `t_group_messages_104` (line 2219) | CREATE TABLE `t_group_messages_104` (
  type `t_group_messages_105` (line 2240) | CREATE TABLE `t_group_messages_105` (
  type `t_group_messages_106` (line 2261) | CREATE TABLE `t_group_messages_106` (
  type `t_group_messages_107` (line 2282) | CREATE TABLE `t_group_messages_107` (
  type `t_group_messages_108` (line 2303) | CREATE TABLE `t_group_messages_108` (
  type `t_group_messages_109` (line 2324) | CREATE TABLE `t_group_messages_109` (
  type `t_group_messages_110` (line 2346) | CREATE TABLE `t_group_messages_110` (
  type `t_group_messages_111` (line 2367) | CREATE TABLE `t_group_messages_111` (
  type `t_group_messages_112` (line 2388) | CREATE TABLE `t_group_messages_112` (
  type `t_group_messages_113` (line 2409) | CREATE TABLE `t_group_messages_113` (
  type `t_group_messages_114` (line 2430) | CREATE TABLE `t_group_messages_114` (
  type `t_group_messages_115` (line 2451) | CREATE TABLE `t_group_messages_115` (
  type `t_group_messages_116` (line 2472) | CREATE TABLE `t_group_messages_116` (
  type `t_group_messages_117` (line 2493) | CREATE TABLE `t_group_messages_117` (
  type `t_group_messages_118` (line 2514) | CREATE TABLE `t_group_messages_118` (
  type `t_group_messages_119` (line 2535) | CREATE TABLE `t_group_messages_119` (
  type `t_group_messages_120` (line 2557) | CREATE TABLE `t_group_messages_120` (
  type `t_group_messages_121` (line 2578) | CREATE TABLE `t_group_messages_121` (
  type `t_group_messages_122` (line 2599) | CREATE TABLE `t_group_messages_122` (
  type `t_group_messages_123` (line 2620) | CREATE TABLE `t_group_messages_123` (
  type `t_group_messages_124` (line 2641) | CREATE TABLE `t_group_messages_124` (
  type `t_group_messages_125` (line 2662) | CREATE TABLE `t_group_messages_125` (
  type `t_group_messages_126` (line 2683) | CREATE TABLE `t_group_messages_126` (
  type `t_group_messages_127` (line 2704) | CREATE TABLE `t_group_messages_127` (

FILE: broker/migrate/mysql/V56__add_domain_table.sql
  type `t_domain` (line 2) | CREATE TABLE `t_domain` (

FILE: broker/migrate/mysql/V57__update_group_member_index.sql
  type `user_gid_mid_dt_index` (line 1) | CREATE INDEX `user_gid_mid_dt_index` ON `t_group_member` (`_gid`, `_mid`...

FILE: broker/migrate/mysql/V58__reupdate_group_member_index.sql
  type `user_gid_dt_index` (line 2) | CREATE INDEX `user_gid_dt_index` ON `t_group_member` (`_gid`, `_dt`)

FILE: broker/migrate/mysql/V64__add_group_member_index.sql
  type `user_gid_type_index` (line 1) | CREATE INDEX `user_gid_type_index` ON `t_group_member` (`_gid`, `_type`)

FILE: broker/migrate/mysql/V65__create_conference_table.sql
  type `t_conference` (line 3) | CREATE TABLE `t_conference` (

FILE: broker/migrate/mysql/V66__create_join_group_request_table.sql
  type `t_join_group_request` (line 3) | CREATE TABLE `t_join_group_request` (

FILE: broker/migrate/mysql/V9__add_sensitive_messages.sql
  type `t_sensitive_messages` (line 3) | CREATE TABLE `t_sensitive_messages` (

FILE: broker/src/main/java/cn/wildfirechat/push/PushMessage.java
  class PushMessage (line 12) | public class PushMessage {
    method PushMessage (line 42) | public PushMessage(String sender, int conversationType, String target,...
    method PushMessage (line 73) | public PushMessage(String sender, String target, long serverTime, Stri...

FILE: broker/src/main/java/cn/wildfirechat/push/PushServer.java
  class PushServer (line 30) | public class PushServer {
    type PushMessageType (line 33) | public interface PushMessageType {
    method PushServer (line 51) | private PushServer() {
    method getServer (line 54) | public static PushServer getServer() {
    method init (line 58) | public void init(IConfig config, ISessionsStore sessionsStore) {
    method pushMessage (line 65) | public void pushMessage(PushMessage pushMessage, String deviceId, Stri...
    method pushMessageInternel (line 77) | private void pushMessageInternel(PushMessage pushMessage, String devic...

FILE: broker/src/main/java/cn/wildfirechat/server/Server.java
  class Server (line 13) | public class Server {
    method main (line 14) | public static void main(String[] args) throws IOException {

FILE: broker/src/main/java/cn/wildfirechat/server/ThreadPoolExecutorWrapper.java
  class ThreadPoolExecutorWrapper (line 17) | public class ThreadPoolExecutorWrapper {
    method ThreadPoolExecutorWrapper (line 24) | public ThreadPoolExecutorWrapper(ScheduledExecutorService executor, in...
    method execute (line 31) | public void execute(Runnable task) {
    method shutdown (line 48) | public void shutdown() {

FILE: broker/src/main/java/com/xiaoleilu/loServer/LoFileServer.java
  class LoFileServer (line 36) | public class LoFileServer {
    method LoFileServer (line 42) | public LoFileServer(int port, IMessagesStore messagesStore) {
    method start (line 51) | public void start() throws InterruptedException {
    method shutdown (line 88) | public void shutdown() {

FILE: broker/src/main/java/com/xiaoleilu/loServer/LoServer.java
  class LoServer (line 36) | public class LoServer {
    method LoServer (line 45) | public LoServer(int port, int adminPort, IMessagesStore messagesStore,...
    method start (line 56) | public void start() throws InterruptedException {
    method shutdown (line 121) | public void shutdown() {
    method registerAllAction (line 141) | private void registerAllAction() {

FILE: broker/src/main/java/com/xiaoleilu/loServer/RestResult.java
  class RestResult (line 13) | public class RestResult {
    method ok (line 20) | public static RestResult ok(Object object) {
    method ok (line 24) | public static RestResult ok() {
    method resultOf (line 28) | public static RestResult resultOf(ErrorCode errorCode) {
    method resultOf (line 32) | public static RestResult resultOf(ErrorCode errorCode, String msg) {
    method resultOf (line 36) | public static RestResult resultOf(ErrorCode errorCode, String msg, Obj...
    method setErrorCode (line 44) | public void setErrorCode(ErrorCode errorCode) {
    method getCode (line 47) | public int getCode() {
    method setCode (line 51) | public void setCode(int code) {
    method getMsg (line 55) | public String getMsg() {
    method setMsg (line 59) | public void setMsg(String msg) {
    method getResult (line 63) | public Object getResult() {
    method setResult (line 67) | public void setResult(Object result) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/ServerSetting.java
  class ServerSetting (line 25) | public class ServerSetting {
    method getCharset (line 60) | public static String getCharset() {
    method charset (line 66) | public static Charset charset() {
    method setCharset (line 74) | public static void setCharset(String charset) {
    method getPort (line 81) | public static int getPort() {
    method setPort (line 88) | public static void setPort(int port) {
    method getRoot (line 96) | public static File getRoot() {
    method isRootAvailable (line 102) | public static boolean isRootAvailable() {
    method getRootPath (line 111) | public static String getRootPath() {
    method setRoot (line 118) | public static void setRoot(String root) {
    method setRoot (line 126) | public static void setRoot(File root) {
    method getFilterMap (line 140) | public static Map<String, Filter> getFilterMap() {
    method getFilter (line 148) | public static Filter getFilter(String path){
    method setFilterMap (line 158) | public static void setFilterMap(Map<String, Filter> filterMap) {
    method setFilter (line 167) | public static void setFilter(String path, Filter filter) {
    method setFilter (line 189) | public static void setFilter(String path, Class<? extends Filter> filt...
    method getActionMap (line 198) | public static Map<String, Class<? extends Action>> getActionMap(String...
    method getErrorAction (line 211) | public static Action getErrorAction(String path) {
    method getAction (line 230) | public static Action getAction(String path, String method){
    method setAction (line 253) | public static void setAction(String path, Class<? extends Action> acti...
    method setAction (line 279) | public static void setAction(Class<? extends Action> actionClass) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/Action.java
  class Action (line 47) | abstract public class Action {
    method init (line 60) | public static void init(IConfig config) {
    class Result (line 90) | protected class Result {
      method Result (line 94) | public Result(ErrorCode errorCode) {
      method Result (line 98) | public Result(ErrorCode errorCode, Object data) {
      method getData (line 103) | public Object getData() {
      method getErrorCode (line 107) | public ErrorCode getErrorCode() {
    type ApiCallback (line 112) | protected interface ApiCallback {
      method onResult (line 113) | Result onResult(byte[] response);
    method preAction (line 116) | public ErrorCode preAction(Request request, Response response) {
    method doAction (line 123) | public boolean doAction(Request request, Response response) {
    method isTransactionAction (line 154) | public boolean isTransactionAction() {
    method action (line 157) | abstract public boolean action(Request request, Response response);
    method getRequestBody (line 159) | protected <T> T getRequestBody(HttpRequest request, Class<T> cls) {
    method setResponseContent (line 184) | protected void setResponseContent(RestResult result, Response response) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/CheckTokenAction.java
  class CheckTokenAction (line 27) | @Route("/api/verify_token")
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/ClassUtil.java
  class ClassUtil (line 21) | public class ClassUtil {
    method getAllAssignedClass (line 31) | public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws ...
    method getClasses (line 50) | public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
    method getClasses (line 84) | private static List<Class<?>> getClasses(File dir, String pk) throws C...
    method getClassName (line 111) | public static List<String> getClassName(String packageName, boolean ch...
    method getClassNameByFile (line 136) | private static List<String> getClassNameByFile(String filePath, List<S...
    method getClassNameByJar (line 171) | private static List<String> getClassNameByJar(String jarPath, boolean ...
    method getClassNameByJars (line 217) | private static List<String> getClassNameByJars(URL[] urls, String pack...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/DefaultIndexAction.java
  class DefaultIndexAction (line 13) | public class DefaultIndexAction extends Action{
    method action (line 14) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java
  class FileAction (line 37) | public class FileAction extends Action {
    method action (line 40) | @Override
    method isAudioOrVideoFile (line 106) | private static boolean isAudioOrVideoFile(String name) {
    method getFileByPath (line 127) | public static File getFileByPath(String httpPath) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java
  class IMAction (line 33) | @Route("/im")
    method action (line 37) | @Override
    method sendResponse (line 120) | private void sendResponse(Response response, ErrorCode errorCode, byte...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/NotFoundAction.java
  class NotFoundAction (line 18) | public class NotFoundAction extends Action{
    method action (line 26) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java
  class RouteAction (line 37) | @Route("/route")
    method action (line 42) | @Override
    method computeRealIp (line 161) | private String computeRealIp(Map<String, String> h, String remote) {
    method sendResponse (line 175) | private void sendResponse(Response response, ErrorCode errorCode, byte...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/UnknownErrorAction.java
  class UnknownErrorAction (line 19) | public class UnknownErrorAction extends Action{
    method action (line 26) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/UploadFileAction.java
  class UploadFileAction (line 35) | @Route("/fs")
    class InvalidateTokenExecption (line 43) | public static class InvalidateTokenExecption extends Exception {
    method getToken (line 47) | public static String getToken(int type) {
    method validateToken (line 58) | public static int validateToken(String token) throws InvalidateTokenEx...
    method action (line 77) | @Override
    method multipartUpload (line 102) | private void multipartUpload(FullHttpRequest request, String requestId...
    method readHttpDataChunkByChunk (line 152) | private void readHttpDataChunkByChunk(Response response, HttpPostReque...
    method writeFileUploadData (line 176) | private boolean writeFileUploadData(InterfaceHttpData data, Response r...
    method getSafeFileName (line 344) | private static String getSafeFileName(String originalFilename) {
    method put (line 353) | public static void put(File file, long pos, byte[] data) throws Except...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/VersionAction.java
  class VersionAction (line 25) | @Route("/api/version")
    method action (line 30) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddFriendRequestAction.java
  class AddFriendRequestAction (line 25) | @Route(APIPath.Friend_Send_Request)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java
  class AddGroupMemberAction (line 27) | @Route(APIPath.Group_Member_Add)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java
  class AdminAction (line 29) | abstract public class AdminAction extends Action {
    method setSecretKey (line 33) | public static void setSecretKey(String secretKey) {
    method getSecretKey (line 37) | public static String getSecretKey() {
    method setNoCheckTime (line 41) | public static void setNoCheckTime(String noCheckTime) {
    method preAction (line 49) | @Override
    method sendResponse (line 94) | protected void sendResponse(Response response, ErrorCode errorCode, Ob...
    method sendApiMessage (line 106) | protected void sendApiMessage(Response response, String fromUser, Stri...
    method sendApiMessage (line 110) | protected void sendApiMessage(Response response, String fromUser, Stri...
    method sendApiMessage (line 114) | protected void sendApiMessage(Response response, String fromUser, Stri...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/AliasGetAction.java
  class AliasGetAction (line 30) | @Route(APIPath.Friend_Get_Alias)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/AliasPutAction.java
  class AliasPutAction (line 35) | @Route(APIPath.Friend_Set_Alias)
    method isTransactionAction (line 39) | @Override
    method action (line 44) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/ApplicationGetUserInfoAction.java
  class ApplicationGetUserInfoAction (line 19) | @Route(APIPath.User_Application_Get_UserInfo)
    method isTransactionAction (line 23) | @Override
    method action (line 28) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlacklistAction.java
  class BlacklistAction (line 28) | @Route(APIPath.Blacklist_Update_Status)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlacklistGetAction.java
  class BlacklistGetAction (line 28) | @Route(APIPath.Blacklist_Get_List)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java
  class BlockUserAction (line 25) | @Route(APIPath.User_Update_Block_Status)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/BroadcastMessageAction.java
  class BroadcastMessageAction (line 29) | @Route(APIPath.Msg_Broadcast)
    method isTransactionAction (line 33) | @Override
    method action (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/ChannelSubscriberAction.java
  class ChannelSubscriberAction (line 33) | @Route(APIPath.Subscribe_Channel)
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java
  class CheckUserOnlineAction (line 24) | @Route(APIPath.User_Get_Online_Status)
    method isTransactionAction (line 28) | @Override
    method action (line 33) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserSubscribeChannelAction.java
  class CheckUserSubscribeChannelAction (line 26) | @Route(APIPath.Check_User_Subscribe_Channel)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChannelAction.java
  class CreateChannelAction (line 27) | @Route(APIPath.Create_Channel)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java
  class CreateChatroomAction (line 27) | @Route(APIPath.Create_Chatroom)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java
  class CreateGroupAction (line 28) | @Route(APIPath.Create_Group)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java
  class CreateRobotAction (line 31) | @Route(APIPath.Create_Robot)
    method isTransactionAction (line 36) | @Override
    method action (line 41) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java
  class CreateUserAction (line 32) | @Route(APIPath.Create_User)
    method isTransactionAction (line 37) | @Override
    method action (line 42) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java
  class DestoryChatroomAction (line 25) | @Route(APIPath.Chatroom_Destroy)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestroyChannelAction.java
  class DestroyChannelAction (line 27) | @Route(APIPath.Destroy_Channel)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestroyUserAction.java
  class DestroyUserAction (line 28) | @Route(APIPath.Destroy_User)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java
  class DismissGroupAction (line 27) | @Route(APIPath.Group_Dismiss)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendExtraPutAction.java
  class FriendExtraPutAction (line 26) | @Route(APIPath.Friend_Set_Extra)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java
  class FriendRelationAction (line 28) | @Route(APIPath.Friend_Update_Status)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationGetAction.java
  class FriendRelationGetAction (line 29) | @Route(APIPath.Friend_Get_List)
    method isTransactionAction (line 33) | @Override
    method action (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetAllUserAction.java
  class GetAllUserAction (line 29) | @Route(APIPath.User_Get_All)
    method isTransactionAction (line 33) | @Override
    method action (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetBatchUserAction.java
  class GetBatchUserAction (line 28) | @Route(APIPath.User_Batch_Get_Infos)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChannelAction.java
  class GetChannelAction (line 24) | @Route(APIPath.Get_Channel_Info)
    method isTransactionAction (line 28) | @Override
    method action (line 33) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java
  class GetChatroomInfoAction (line 25) | @Route(APIPath.Chatroom_Info)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomMembersAction.java
  class GetChatroomMembersAction (line 32) | @Route(APIPath.Chatroom_GetMembers)
    method isTransactionAction (line 36) | @Override
    method action (line 41) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetCommonGroupsAction.java
  class GetCommonGroupsAction (line 27) | @Route(APIPath.Get_Common_Groups)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java
  class GetGroupInfoAction (line 28) | @Route(APIPath.Group_Get_Info)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMemberAction.java
  class GetGroupMemberAction (line 30) | @Route(APIPath.Group_Member_Get)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java
  class GetGroupMembersAction (line 32) | @Route(APIPath.Group_Member_List)
    method isTransactionAction (line 36) | @Override
    method action (line 41) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java
  class GetIMTokenAction (line 28) | @Route(APIPath.User_Get_Token)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetMessageAction.java
  class GetMessageAction (line 28) | @Route(APIPath.Msg_GetOne)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetOnlineUserAction.java
  class GetOnlineUserAction (line 25) | @Route(APIPath.User_Online_List)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetRobotAction.java
  class GetRobotAction (line 26) | @Route(APIPath.User_Get_Robot_Info)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetSystemSettingAction.java
  class GetSystemSettingAction (line 27) | @Route(APIPath.Get_System_Setting)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUploadUrlAction.java
  class GetUploadUrlAction (line 28) | @Route(APIPath.Get_Presigned_Upload_Url)
    method action (line 32) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java
  class GetUserAction (line 26) | @Route(APIPath.User_Get_Info)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockListAction.java
  class GetUserBlockListAction (line 22) | @Route(APIPath.User_Get_Blocked_List)
    method isTransactionAction (line 26) | @Override
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java
  class GetUserBlockStatusAction (line 25) | @Route(APIPath.User_Check_Block_Status)
    method isTransactionAction (line 29) | @Override
    method action (line 34) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserChatroomAction.java
  class GetUserChatroomAction (line 30) | @Route(APIPath.Chatroom_GetUserChatroom)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsAction.java
  class GetUserGroupsAction (line 31) | @Route(APIPath.Get_User_Groups)
    method isTransactionAction (line 35) | @Override
    method action (line 40) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsByTypeAction.java
  class GetUserGroupsByTypeAction (line 27) | @Route(APIPath.Get_User_Groups_By_Type)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserOnlineCountAction.java
  class GetUserOnlineCountAction (line 27) | @Route(APIPath.User_Online_Count)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserRobotsAction.java
  class GetUserRobotsAction (line 26) | @Route(APIPath.User_Get_User_Robots)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserSessionsAction.java
  class GetUserSessionsAction (line 28) | @Route(APIPath.User_Session_List)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUsersByEmailAction.java
  class GetUsersByEmailAction (line 28) | @Route(APIPath.User_Get_Email_Info)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/HealthAction.java
  class HealthAction (line 27) | @Route(APIPath.Health)
    method isTransactionAction (line 30) | @Override
    method action (line 35) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffGroupMemberAction.java
  class KickoffGroupMemberAction (line 27) | @Route(APIPath.Group_Member_Kickoff)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/KickoffUserClientAction.java
  class KickoffUserClientAction (line 24) | @Route(APIPath.User_Kickoff_Client)
    method isTransactionAction (line 28) | @Override
    method action (line 33) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/ModifyGroupInfoAction.java
  class ModifyGroupInfoAction (line 27) | @Route(APIPath.Group_Modify_Info)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/ModifyGroupMemberAliasAction.java
  class ModifyGroupMemberAliasAction (line 27) | @Route(APIPath.Group_Set_Member_Alias)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/ModifyGroupMemberExtraAction.java
  class ModifyGroupMemberExtraAction (line 29) | @Route(APIPath.Group_Set_Member_Extra)
    method isTransactionAction (line 33) | @Override
    method action (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/MulticastMessageAction.java
  class MulticastMessageAction (line 28) | @Route(APIPath.Msg_Multicast)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/PutSystemSettingAction.java
  class PutSystemSettingAction (line 27) | @Route(APIPath.Put_System_Setting)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/QuitGroupMemberAction.java
  class QuitGroupMemberAction (line 27) | @Route(APIPath.Group_Member_Quit)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMessageAction.java
  class RecallMessageAction (line 31) | @Route(APIPath.Msg_Recall)
    method isTransactionAction (line 35) | @Override
    method action (line 40) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/RecallMultiCastMessageAction.java
  class RecallMultiCastMessageAction (line 28) | @Route(APIPath.Msg_RecallMultiCast)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/RelationGetAction.java
  class RelationGetAction (line 30) | @Route(APIPath.Relation_Get)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/SendMessageAction.java
  class SendMessageAction (line 29) | @Route(APIPath.Msg_Send)
    method isTransactionAction (line 33) | @Override
    method action (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordAddAction.java
  class SensitiveWordAddAction (line 23) | @Route(APIPath.Sensitive_Add)
    method isTransactionAction (line 27) | @Override
    method action (line 32) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordDeleteAction.java
  class SensitiveWordDeleteAction (line 23) | @Route(APIPath.Sensitive_Del)
    method isTransactionAction (line 27) | @Override
    method action (line 32) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/SensitiveWordQueryAction.java
  class SensitiveWordQueryAction (line 22) | @Route(APIPath.Sensitive_Query)
    method isTransactionAction (line 26) | @Override
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/SetGroupManagerAction.java
  class SetGroupManagerAction (line 27) | @Route(APIPath.Group_Set_Manager)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/TransferGroupAction.java
  class TransferGroupAction (line 27) | @Route(APIPath.Group_Transfer)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/admin/UpdateUserAction.java
  class UpdateUserAction (line 33) | @Route(APIPath.Update_User)
    method isTransactionAction (line 38) | @Override
    method action (line 43) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/ApplicationGetUserInfoAction.java
  class ApplicationGetUserInfoAction (line 27) | @Route(APIPath.Channel_Application_Get_UserInfo)
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/ChannelAction.java
  class ChannelAction (line 34) | abstract public class ChannelAction extends Action {
    type Callback (line 38) | protected interface Callback {
      method onSuccess (line 39) | void onSuccess(byte[] response);
    method preAction (line 42) | @Override
    method sendResponse (line 97) | protected void sendResponse(Response response, ErrorCode errorCode, Ob...
    method sendApiMessage (line 108) | protected void sendApiMessage(Response response, String topic, byte[] ...
    method sendApiMessage (line 111) | protected void sendApiMessage(Response response, String user, String t...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/GetChannelAction.java
  class GetChannelAction (line 27) | @Route(APIPath.Channel_Get_Profile)
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/GetChannelSubscribersAction.java
  class GetChannelSubscribersAction (line 29) | @Route(APIPath.Channel_Subscriber_List)
    method action (line 33) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/GetIsChannelSubscriberAction.java
  class GetIsChannelSubscriberAction (line 24) | @Route(APIPath.Channel_Is_Subscriber)
    method action (line 28) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/GetUserAction.java
  class GetUserAction (line 25) | @Route(APIPath.Channel_User_Info)
    method action (line 29) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/ModifyChannelProfileAction.java
  class ModifyChannelProfileAction (line 27) | @Route(APIPath.Channel_Update_Profile)
    method action (line 30) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/SendMessageAction.java
  class SendMessageAction (line 31) | @Route(APIPath.Channel_Message_Send)
    method isTransactionAction (line 35) | @Override
    method action (line 40) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/channel/SubscriberChannelAction.java
  class SubscriberChannelAction (line 29) | @Route(APIPath.Channel_Subscribe)
    method action (line 33) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/AddGroupMemberAction.java
  class AddGroupMemberAction (line 27) | @Route(APIPath.Robot_Group_Member_Add)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/ApplicationGetUserInfoAction.java
  class ApplicationGetUserInfoAction (line 27) | @Route(APIPath.Robot_Application_Get_UserInfo)
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/CreateGroupAction.java
  class CreateGroupAction (line 30) | @Route(APIPath.Robot_Create_Group)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/DeleteCallbackAction.java
  class DeleteCallbackAction (line 24) | @Route(APIPath.Robot_Delete_Callback)
    method action (line 28) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/DismissGroupAction.java
  class DismissGroupAction (line 27) | @Route(APIPath.Robot_Group_Dismiss)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetCallbackAction.java
  class GetCallbackAction (line 27) | @Route(APIPath.Robot_Get_Callback)
    method action (line 31) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupInfoAction.java
  class GetGroupInfoAction (line 27) | @Route(APIPath.Robot_Group_Get_Info)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupMemberAction.java
  class GetGroupMemberAction (line 30) | @Route(APIPath.Robot_Group_Member_Get)
    method isTransactionAction (line 34) | @Override
    method action (line 39) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetGroupMembersAction.java
  class GetGroupMembersAction (line 32) | @Route(APIPath.Robot_Group_Member_List)
    method isTransactionAction (line 36) | @Override
    method action (line 41) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetProfileAction.java
  class GetProfileAction (line 25) | @Route(APIPath.Robot_Get_Profile)
    method action (line 29) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUploadUrlAction.java
  class GetUploadUrlAction (line 41) | @Route(APIPath.Robot_Get_Presigned_Upload_Url)
    method action (line 45) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/GetUserAction.java
  class GetUserAction (line 26) | @Route(APIPath.Robot_User_Info)
    method action (line 30) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/KickoffGroupMemberAction.java
  class KickoffGroupMemberAction (line 27) | @Route(APIPath.Robot_Group_Member_Kickoff)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/ModifyGroupInfoAction.java
  class ModifyGroupInfoAction (line 27) | @Route(APIPath.Robot_Group_Modify_Info)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/ModifyGroupMemberAliasAction.java
  class ModifyGroupMemberAliasAction (line 27) | @Route(APIPath.Robot_Group_Set_Member_Alias)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/ModifyGroupMemberExtraAction.java
  class ModifyGroupMemberExtraAction (line 27) | @Route(APIPath.Robot_Group_Set_Member_Extra)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/QuitGroupMemberAction.java
  class QuitGroupMemberAction (line 27) | @Route(APIPath.Robot_Group_Member_Quit)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/ReplyMessageAction.java
  class ReplyMessageAction (line 34) | @Route(APIPath.Robot_Message_Reply)
    method isTransactionAction (line 38) | @Override
    method action (line 43) | @Override
    method getSendMessageData (line 98) | private @NotNull SendMessageData getSendMessageData(WFCMessage.Message...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/RobotAction.java
  class RobotAction (line 35) | abstract public class RobotAction extends Action {
    type Callback (line 40) | protected interface Callback {
      method onSuccess (line 41) | void onSuccess(byte[] response);
    method preAction (line 44) | @Override
    method sendResponse (line 98) | protected void sendResponse(Response response, ErrorCode errorCode, Ob...
    method sendApiRequest (line 109) | protected void sendApiRequest(Response response, String topic, byte[] ...

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/SendMessageAction.java
  class SendMessageAction (line 28) | @Route(APIPath.Robot_Message_Send)
    method isTransactionAction (line 32) | @Override
    method action (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/SetCallbackAction.java
  class SetCallbackAction (line 25) | @Route(APIPath.Robot_Set_Callback)
    method action (line 29) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/TransferGroupAction.java
  class TransferGroupAction (line 27) | @Route(APIPath.Robot_Group_Transfer)
    method isTransactionAction (line 31) | @Override
    method action (line 36) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/action/robot/UpdateProfileAction.java
  class UpdateProfileAction (line 26) | @Route(APIPath.Robot_Update_Profile)
    method action (line 30) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/exception/ServerSettingException.java
  class ServerSettingException (line 10) | public class ServerSettingException extends RuntimeException{
    method ServerSettingException (line 13) | public ServerSettingException(Throwable e) {
    method ServerSettingException (line 17) | public ServerSettingException(String message) {
    method ServerSettingException (line 21) | public ServerSettingException(String messageTemplate, Object... params) {
    method ServerSettingException (line 25) | public ServerSettingException(String message, Throwable throwable) {
    method ServerSettingException (line 29) | public ServerSettingException(Throwable throwable, String messageTempl...

FILE: broker/src/main/java/com/xiaoleilu/loServer/filter/Filter.java
  type Filter (line 11) | public interface Filter {
    method doFilter (line 19) | public boolean doFilter(Request request, Response response);

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/ActionHandler.java
  class ActionHandler (line 28) | abstract public class ActionHandler extends SimpleChannelInboundHandler<...
    method ActionHandler (line 31) | public ActionHandler(IMessagesStore messagesStore, ISessionsStore sess...
    method channelRead0 (line 36) | @Override
    method exceptionCaught (line 70) | @Override
    method doFilter (line 85) | private boolean doFilter(Request request, Response response) {
    method isValidePath (line 105) | abstract boolean isValidePath(String path);
    method doAction (line 111) | private void doAction(ChannelHandlerContext ctx, Request request, Resp...
    method handleOptions (line 164) | private void handleOptions(ChannelHandlerContext ctx, Request request,...

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/AdminActionHandler.java
  class AdminActionHandler (line 30) | public class AdminActionHandler extends ActionHandler {
    method AdminActionHandler (line 33) | public AdminActionHandler(IMessagesStore messagesStore, ISessionsStore...
    method isValidePath (line 37) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/HttpChunkContentCompressor.java
  class HttpChunkContentCompressor (line 15) | public class HttpChunkContentCompressor extends HttpContentCompressor {
    method write (line 16) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/HttpFileServerController.java
  class HttpFileServerController (line 9) | public class HttpFileServerController {
    class BrokenUploadInfoHandlerHolder (line 14) | private static class BrokenUploadInfoHandlerHolder {
    method HttpFileServerController (line 21) | private HttpFileServerController() {
    method getInstance (line 28) | public static HttpFileServerController getInstance() {
    method mapChannelHandlerContext (line 38) | public synchronized void mapChannelHandlerContext(String requestId, Ch...
    method getChannelHandlerContext (line 52) | public ChannelHandlerContext getChannelHandlerContext(String requestId) {
    method removeChannelHandlerContext (line 66) | public void removeChannelHandlerContext(String requestId) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/HttpFileServerHandler.java
  class HttpFileServerHandler (line 24) | public class HttpFileServerHandler extends ChannelInboundHandlerAdapter {
    method channelRead (line 29) | @Override
    method exceptionCaught (line 64) | @Override
    method multipartUpload (line 80) | private void multipartUpload(ChannelHandlerContext ctx, FullHttpReques...
    method readHttpDataChunkByChunk (line 126) | private void readHttpDataChunkByChunk(ChannelHandlerContext ctx, HttpP...
    method writeFileUploadData (line 146) | private void writeFileUploadData(InterfaceHttpData data, ChannelHandle...
    method put (line 244) | public static void put(File file, long pos, byte[] data) throws Except...
    method download (line 263) | private void download(ChannelHandlerContext ctx, FullHttpRequest reque...
    method delete (line 331) | private void delete(ChannelHandlerContext ctx, FullHttpRequest request...
    method doOptions (line 378) | private void doOptions(ChannelHandlerContext ctx, FullHttpRequest requ...
    method releaseRequest (line 405) | private void releaseRequest(FullHttpRequest request, HttpPostRequestDe...

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/HttpResponseHelper.java
  class HttpResponseHelper (line 19) | public class HttpResponseHelper {
    method sendResponse (line 29) | public static void sendResponse(String requestId, ChannelHandlerContex...
    method sendResponse (line 40) | public static void sendResponse(String requestId, ChannelHandlerContex...
    method sendResponse (line 61) | public static void sendResponse(String requestId, ChannelHandlerContex...
    method sendResponse (line 91) | public static void sendResponse(String requestId, ChannelHandlerContex...
    method sendBrokenUpload204Resonse (line 108) | public static void sendBrokenUpload204Resonse(String requestId, Channe...
    method getMultipartUploadResponseBody (line 122) | public static String getMultipartUploadResponseBody(String remoteFileN...
    method getFileExt (line 134) | public static String getFileExt(String fileName) {
    method getContentType (line 143) | public static String getContentType(String fileName) {
    method removeChannelHandlerContext (line 158) | private static void removeChannelHandlerContext(String requestId, Chan...
    method removeChannelHandlerContext (line 162) | private static void removeChannelHandlerContext(String requestId, Chan...

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/IMActionHandler.java
  class IMActionHandler (line 31) | public class IMActionHandler extends ActionHandler {
    method IMActionHandler (line 34) | public IMActionHandler(IMessagesStore messagesStore, ISessionsStore se...
    method isValidePath (line 38) | @Override

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/Request.java
  class Request (line 45) | public class Request {
    method Request (line 72) | private Request(ChannelHandlerContext ctx, FullHttpRequest nettyReques...
    method getNettyRequest (line 89) | public HttpRequest getNettyRequest() {
    method getProtocolVersion (line 98) | public String getProtocolVersion() {
    method getUri (line 107) | public String getUri() {
    method getPath (line 114) | public String getPath() {
    method getMethod (line 123) | public String getMethod() {
    method getIp (line 132) | public String getIp() {
    method getHeaders (line 141) | public Map<String, String> getHeaders() {
    method getHeader (line 152) | public String getHeader(String headerKey) {
    method isXWwwFormUrlencoded (line 159) | public boolean isXWwwFormUrlencoded() {
    method getCookie (line 169) | public Cookie getCookie(String name) {
    method getCookies (line 176) | public Map<String, Cookie> getCookies() {
    method isIE (line 183) | public boolean isIE() {
    method getParam (line 198) | public String getParam(String name) {
    method getObjParam (line 214) | public Object getObjParam(String name) {
    method getParam (line 227) | public String getParam(String name, Charset charset) {
    method getParam (line 250) | public String getParam(String name, String defaultValue) {
    method getIntParam (line 260) | public Integer getIntParam(String name, Integer defaultValue) {
    method getLongParam (line 269) | public Long getLongParam(String name, Long defaultValue) {
    method getDoubleParam (line 278) | public Double getDoubleParam(String name, Double defaultValue) {
    method getFloatParam (line 287) | public Float getFloatParam(String name, Float defaultValue) {
    method getBoolParam (line 296) | public Boolean getBoolParam(String name, Boolean defaultValue) {
    method getDateParam (line 310) | public Date getDateParam(String name, Date defaultValue) {
    method getDateParam (line 321) | public Date getDateParam(String name, String format, Date defaultValue) {
    method getArrayParam (line 333) | @SuppressWarnings("unchecked")
    method getParams (line 354) | public Map<String, Object> getParams() {
    method isKeepAlive (line 361) | public boolean isKeepAlive() {
    method putParams (line 384) | protected void putParams(QueryStringDecoder decoder) {
    method putParams (line 401) | protected void putParams(HttpPostRequestDecoder decoder) {
    method putParam (line 416) | protected void putParam(InterfaceHttpData data) {
    method putParam (line 445) | protected void putParam(String key, Object value) {
    method putHeadersAndCookies (line 454) | protected void putHeadersAndCookies(HttpHeaders headers) {
    method putIp (line 474) | protected void putIp(ChannelHandlerContext ctx) {
    method toString (line 486) | @Override
    method build (line 513) | protected final static Request build(ChannelHandlerContext ctx, FullHt...

FILE: broker/src/main/java/com/xiaoleilu/loServer/handler/Response.java
  class Response (line 52) | public class Response {
    method Response (line 80) | public Response(ChannelHandlerContext ctx, Request request) {
    method setHttpVersion (line 91) | public Response setHttpVersion(HttpVersion httpVersion) {
    method setStatus (line 103) | public Response setStatus(HttpResponseStatus status) {
    method setStatus (line 114) | public Response setStatus(int status) {
    method setContentType (line 124) | public Response setContentType(String contentType) {
    method setCharset (line 135) | public Response setCharset(String charset) {
    method addHeader (line 148) | public Response addHeader(String name, Object value) {
    method setHeader (line 161) | public Response setHeader(String name, Object value) {
    method setContentLength (line 172) | public Response setContentLength(long contentLength) {
    method setKeepAlive (line 182) | public Response setKeepAlive() {
    method addCookie (line 194) | public Response addCookie(Cookie cookie) {
    method addCookie (line 206) | public Response addCookie(String name, String value) {
    method addCookie (line 220) | public Response addCookie(String name, String value, int maxAgeInSecon...
    method addCookie (line 240) | public Response addCookie(String name, String value, int maxAgeInSecon...
    method setContent (line 251) | public Response setContent(String contentText) {
    method setTextContent (line 262) | public Response setTextContent(String contentText) {
    method setJsonContent (line 273) | public Response setJsonContent(String contentText) {
    method setXmlContent (line 284) | public Response setXmlContent(String contentText) {
    method setContent (line 295) | public Response setContent(byte[] contentBytes) {
    method setContent (line 305) | public Response setContent(ByteBuf byteBuf) {
    method setContent (line 316) | public Response setContent(File file) {
    method setDateAndCache (line 333) | public void setDateAndCache(long lastModify, int httpCacheSeconds) {
    method toDefaultHttpResponse (line 356) | private DefaultHttpResponse toDefaultHttpResponse() {
    method toFullHttpResponse (line 376) | private FullHttpResponse toFullHttpResponse() {
    method send (line 407) | public ChannelFuture send() {
    method isSent (line 430) | protected boolean isSent(){
    method sendFull (line 439) | private ChannelFuture sendFull() {
    method sendAndCloseFull (line 453) | private ChannelFuture sendAndCloseFull() {
    method sendFile (line 464) | private ChannelFuture sendFile(File file) throws IOException {
    method sendEmptyLast (line 492) | private ChannelFuture sendEmptyLast(){
    method sendRedirect (line 510) | public ChannelFuture sendRedirect(String uri) {
    method sendNotModified (line 519) | public ChannelFuture sendNotModified() {
    method sendError (line 530) | public ChannelFuture sendError(HttpResponseStatus status, String msg) {
    method sendNotFound (line 543) | public ChannelFuture sendNotFound(String msg) {
    method sendServerError (line 553) | public ChannelFuture sendServerError(String msg) {
    method toString (line 559) | @Override
    method build (line 579) | protected static Response build(ChannelHandlerContext ctx, Request req...
    method build (line 590) | protected static Response build(ChannelHandlerContext ctx) {

FILE: broker/src/main/java/com/xiaoleilu/loServer/listener/FileProgressiveFutureListener.java
  class FileProgressiveFutureListener (line 15) | public class FileProgressiveFutureListener implements ChannelProgressive...
    method FileProgressiveFutureListener (line 20) | public FileProgressiveFutureListener(RandomAccessFile raf) {
    method operationProgressed (line 24) | @Override
    method operationComplete (line 29) | @Override
    method build (line 40) | public static FileProgressiveFutureListener build(RandomAccessFile raf){

FILE: broker/src/main/java/com/xiaoleilu/loServer/model/FriendData.java
  class FriendData (line 13) | public class FriendData implements Serializable {
    method FriendData (line 23) | public FriendData(String userId, String friendUid, String alias, Strin...
    method FriendData (line 33) | public FriendData() {
    method getUserId (line 36) | public String getUserId() {
    method setUserId (line 40) | public void setUserId(String userId) {
    method getFriendUid (line 44) | public String getFriendUid() {
    method setFriendUid (line 48) | public void setFriendUid(String friendUid) {
    method getAlias (line 52) | public String getAlias() {
    method setAlias (line 56) | public void setAlias(String alias) {
    method getExtra (line 60) | public String getExtra() {
    method setExtra (line 64) | public void setExtra(String extra) {
    method getState (line 68) | public int getState() {
    method setState (line 72) | public void setState(int state) {
    method getBlacked (line 76) | public int getBlacked() {
    method setBlacked (line 80) | public void setBlacked(int blacked) {
    method getTimestamp (line 84) | public long getTimestamp() {
    method setTimestamp (line 88) | public void setTimestamp(long timestamp) {

FILE: broker/src/main/java/io/moquette/BrokerConstants.java
  class BrokerConstants (line 21) | public final class BrokerConstants {
    method BrokerConstants (line 255) | private BrokerConstants() {

FILE: broker/src/main/java/io/moquette/connections/IConnectionsManager.java
  type IConnectionsManager (line 24) | public interface IConnectionsManager {
    method getActiveConnectionsNo (line 31) | int getActiveConnectionsNo();
    method isConnected (line 39) | boolean isConnected(String clientID);
    method getConnectedClientIds (line 46) | Collection<String> getConnectedClientIds();
    method closeConnection (line 56) | boolean closeConnection(String clientID, boolean closeImmediately);
    method getSessionStatus (line 64) | MqttSession getSessionStatus(String clientID);
    method getSessions (line 71) | Collection<MqttSession> getSessions();

FILE: broker/src/main/java/io/moquette/connections/MqttConnectionMetrics.java
  class MqttConnectionMetrics (line 22) | public class MqttConnectionMetrics {
    method MqttConnectionMetrics (line 29) | public MqttConnectionMetrics(long readBytes, long writtenBytes, long r...
    method getReadKb (line 36) | public long getReadKb() {
    method getWrittenKb (line 40) | public long getWrittenKb() {
    method getReadMessages (line 44) | public long getReadMessages() {
    method getWrittenMessages (line 48) | public long getWrittenMessages() {

FILE: broker/src/main/java/io/moquette/connections/MqttSession.java
  class MqttSession (line 25) | public class MqttSession {
    method isConnectionEstablished (line 34) | public boolean isConnectionEstablished() {
    method setConnectionEstablished (line 38) | public void setConnectionEstablished(boolean connectionEstablished) {
    method isCleanSession (line 42) | public boolean isCleanSession() {
    method setCleanSession (line 46) | public void setCleanSession(boolean cleanSession) {
    method getPendingPublishMessagesNo (line 50) | public int getPendingPublishMessagesNo() {
    method setPendingPublishMessagesNo (line 54) | public void setPendingPublishMessagesNo(int pendingPublishMessagesNo) {
    method getInflightMessages (line 58) | public int getInflightMessages() {
    method setInflightMessages (line 62) | public void setInflightMessages(int inflightMessages) {
    method getSecondPhaseAckPendingMessages (line 66) | public int getSecondPhaseAckPendingMessages() {
    method setSecondPhaseAckPendingMessages (line 70) | public void setSecondPhaseAckPendingMessages(int secondPhaseAckPending...
    method getConnectionMetrics (line 74) | public MqttConnectionMetrics getConnectionMetrics() {
    method setConnectionMetrics (line 78) | public void setConnectionMetrics(MqttConnectionMetrics connectionMetri...

FILE: broker/src/main/java/io/moquette/imhandler/AddFriendHandler.java
  class AddFriendHandler (line 21) | @Handler(IMTopic.AddFriendRequestTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/AddGroupMember.java
  class AddGroupMember (line 25) | @Handler(value = IMTopic.AddGroupMemberTopic)
    method action (line 28) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/BlackListRequestHandler.java
  class BlackListRequestHandler (line 20) | @Handler(IMTopic.BlackListUserTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/BroadcastMessageHandler.java
  class BroadcastMessageHandler (line 25) | @Handler(value = IMTopic.BroadcastMessageTopic)
    method action (line 27) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ChannelListenMember.java
  class ChannelListenMember (line 21) | @Handler(value = IMTopic.ChannelListenTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ChannelListenedListHandler.java
  class ChannelListenedListHandler (line 12) | @Handler(IMTopic.ListenedChannelListTopic)
    method action (line 14) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ChannelSearchHandler.java
  class ChannelSearchHandler (line 20) | @Handler(IMTopic.ChannelSearchTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ConfigApplicationHandler.java
  class ConfigApplicationHandler (line 20) | @Handler(IMTopic.ApplicationConfigRequestTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/CreateChannelHandler.java
  class CreateChannelHandler (line 23) | @Handler(value = IMTopic.CreateChannelTopic)
    method action (line 25) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/CreateGroupHandler.java
  class CreateGroupHandler (line 24) | @Handler(value = IMTopic.CreateGroupTopic)
    method action (line 26) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/DeleteFriendHandler.java
  class DeleteFriendHandler (line 20) | @Handler(IMTopic.DeleteFriendTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/DestroyChannelHandler.java
  class DestroyChannelHandler (line 21) | @Handler(value = IMTopic.DestroyChannelInfoTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/DestroyUserHandler.java
  class DestroyUserHandler (line 18) | @Handler(IMTopic.DestroyUserTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/DisconnectHandler.java
  class DisconnectHandler (line 22) | @Handler(value = IMTopic.ClearSessionTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/DismissGroupHandler.java
  class DismissGroupHandler (line 20) | @Handler(value = DismissGroupTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/FriendPullHandler.java
  class FriendPullHandler (line 22) | @Handler(IMTopic.FriendPullTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/FriendRequestPullHandler.java
  class FriendRequestPullHandler (line 20) | @Handler(IMTopic.FriendRequestPullTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetApplicationTokenHandler.java
  class GetApplicationTokenHandler (line 20) | @Handler(IMTopic.GetApplicationTokenRequestTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetChannelInfoHandler.java
  class GetChannelInfoHandler (line 18) | @Handler(IMTopic.ChannelPullTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetChatroomInfoHandler.java
  class GetChatroomInfoHandler (line 18) | @Handler(IMTopic.GetChatroomInfoTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetChatroomMemberHandler.java
  class GetChatroomMemberHandler (line 18) | @Handler(IMTopic.GetChatroomMemberTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetCommonGroupsHandler.java
  class GetCommonGroupsHandler (line 22) | @Handler(IMTopic.GetCommonGroupsTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetGroupInfoHandler.java
  class GetGroupInfoHandler (line 20) | @Handler(IMTopic.GetGroupInfoTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetGroupMemberHandler.java
  class GetGroupMemberHandler (line 23) | @Handler(IMTopic.GetGroupMemberTopic)
    method action (line 25) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetMediaUploadTokenHandler.java
  class GetMediaUploadTokenHandler (line 23) | @Handler("GMUT")
    method action (line 25) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetMyGroupsHandler.java
  class GetMyGroupsHandler (line 22) | @Handler(IMTopic.GetMyGroupsTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetQiniuUploadTokenHandler.java
  class GetQiniuUploadTokenHandler (line 21) | @Handler(IMTopic.GetQiniuUploadTokenTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java
  class GetTokenHandler (line 21) | @Handler(IMTopic.GetTokenTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetUserInfoHandler.java
  class GetUserInfoHandler (line 20) | @Handler(IMTopic.GetUserInfoTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GetUserSettingHandler.java
  class GetUserSettingHandler (line 20) | @Handler(IMTopic.GetUserSettingTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/GroupHandler.java
  class GroupHandler (line 19) | abstract public class GroupHandler<T> extends IMHandler<T> {
    method sendGroupNotification (line 20) | protected void sendGroupNotification(String fromUser, String targetId,...
    method sendGroupNotification (line 24) | protected void sendGroupNotification(String fromUser, String targetId,...
    method getMemberIdList (line 53) | protected List<String> getMemberIdList(List<WFCMessage.GroupMember> gr...

FILE: broker/src/main/java/io/moquette/imhandler/HandleFriendRequestHandler.java
  class HandleFriendRequestHandler (line 23) | @Handler(IMTopic.HandleFriendRequestTopic)
    method action (line 25) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/IMHandler.java
  class IMHandler (line 52) | abstract public class IMHandler<T> {
    method getPublisher (line 69) | public static MessagesPublisher getPublisher() {
    method IMHandler (line 73) | public IMHandler() {
    method getDataObject (line 110) | private T getDataObject(byte[] bytes) throws IllegalAccessException, I...
    method init (line 148) | public static void init(IMessagesStore ms, ISessionsStore ss, Messages...
    method isNotLimitTopic (line 168) | boolean isNotLimitTopic(String topic) {
    method preAction (line 176) | public ErrorCode preAction(String clientID, String fromUser, String to...
    method doHandler (line 184) | public void doHandler(String clientID, String fromUser, String topic, ...
    method response (line 234) | private void response(ByteBuf ackPayload, ErrorCode errorCode, Qos1Pub...
    method action (line 245) | @ActionMethod
    method afterAction (line 248) | public void afterAction(String clientID, String fromUser, String topic...
    method publish (line 251) | protected long publish(String username, String clientID, WFCMessage.Me...
    method saveAndPublish (line 260) | protected long saveAndPublish(String username, String clientID, WFCMes...
    method saveAndBroadcast (line 270) | protected long saveAndBroadcast(String username, String clientID, WFCM...
    method saveAndMulticast (line 277) | protected long saveAndMulticast(String username, String clientID, WFCM...
    method publishRecallMultiCastMsg (line 284) | protected long publishRecallMultiCastMsg(long messageUid, List<String>...

FILE: broker/src/main/java/io/moquette/imhandler/JoinChatroomHandler.java
  class JoinChatroomHandler (line 19) | @Handler(IMTopic.JoinChatroomTopic)
    method action (line 21) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/KickoffGroupMember.java
  class KickoffGroupMember (line 22) | @Handler(value = KickoffGroupMemberTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/KickoffPCClientHandler.java
  class KickoffPCClientHandler (line 22) | @Handler(value = KickoffPCClientTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/LoadRemoteMessagesHandler.java
  class LoadRemoteMessagesHandler (line 18) | @Handler(value = IMTopic.LoadRemoteMessagesTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyChannelInfoHandler.java
  class ModifyChannelInfoHandler (line 19) | @Handler(value = ModifyChannelInfoTopic)
    method action (line 21) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyGroupAliasHandler.java
  class ModifyGroupAliasHandler (line 24) | @Handler(IMTopic.ModifyGroupAliasTopic)
    method action (line 26) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyGroupInfoHandler.java
  class ModifyGroupInfoHandler (line 22) | @Handler(value = ModifyGroupInfoTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberAliasHandler.java
  class ModifyGroupMemberAliasHandler (line 24) | @Handler(IMTopic.ModifyGroupMemberAliasTopic)
    method action (line 26) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyGroupMemberExtraHandler.java
  class ModifyGroupMemberExtraHandler (line 21) | @Handler(IMTopic.ModifyGroupMemberExtraTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ModifyMyInfoHandler.java
  class ModifyMyInfoHandler (line 19) | @Handler(IMTopic.ModifyMyInfoTopic)
    method action (line 21) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/MultiCastMessageHandler.java
  class MultiCastMessageHandler (line 27) | @Handler(value = IMTopic.MultiCastMessageTopic)
    method action (line 31) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/PullMessageHandler.java
  class PullMessageHandler (line 18) | @Handler(value = IMTopic.PullMessageTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/PutUserSettingHandler.java
  class PutUserSettingHandler (line 18) | @Handler(IMTopic.PutUserSettingTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/QuitChatroomHandler.java
  class QuitChatroomHandler (line 18) | @Handler(IMTopic.QuitChatroomTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/QuitGroupHandler.java
  class QuitGroupHandler (line 22) | @Handler(value = QuitGroupTopic)
    method action (line 24) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/RecallMessageHandler.java
  class RecallMessageHandler (line 21) | @Handler(value = IMTopic.RecallMessageTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/RecallMultiCastMessageHandler.java
  class RecallMultiCastMessageHandler (line 18) | @Handler(value = IMTopic.RecallMultiCastMessageTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/ReplyMessageHandler.java
  class ReplyMessageHandler (line 29) | @Handler(value = IMTopic.RobotReplyMessageTopic)
    method ReplyMessageHandler (line 46) | public ReplyMessageHandler() {
    method parseTypes (line 108) | private void parseTypes(Collection<Integer> collection, String types) {
    method action (line 132) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/RouteHandler.java
  class RouteHandler (line 21) | @Handler(IMTopic.RouteTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/SendMessageHandler.java
  class SendMessageHandler (line 31) | @Handler(value = IMTopic.SendMessageTopic)
    method SendMessageHandler (line 48) | public SendMessageHandler() {
    method parseTypes (line 110) | private void parseTypes(Collection<Integer> collection, String types) {
    method action (line 134) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/SetFriendAliasRequestHandler.java
  class SetFriendAliasRequestHandler (line 20) | @Handler(IMTopic.SetFriendAliasTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/SetFriendExtraHandler.java
  class SetFriendExtraHandler (line 19) | @Handler(IMTopic.SetFriendExtraTopic)
    method action (line 21) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/SetGroupManagerHandler.java
  class SetGroupManagerHandler (line 21) | @Handler(IMTopic.SetGroupManagerTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/SyncFriendRequestUnreadHandler.java
  class SyncFriendRequestUnreadHandler (line 20) | @Handler(IMTopic.RriendRequestUnreadSyncTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/TransferChannelHandler.java
  class TransferChannelHandler (line 18) | @Handler(IMTopic.TransferChannelInfoTopic)
    method action (line 20) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/TransferGroupHandler.java
  class TransferGroupHandler (line 21) | @Handler(IMTopic.TransferGroupTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/UploadDeviceTokenHandler.java
  class UploadDeviceTokenHandler (line 20) | @Handler(IMTopic.UploadDeviceTokenTopic)
    method action (line 22) | @Override

FILE: broker/src/main/java/io/moquette/imhandler/UserSearchHandler.java
  class UserSearchHandler (line 21) | @Handler(IMTopic.UserSearchTopic)
    method action (line 23) | @Override

FILE: broker/src/main/java/io/moquette/interception/InterceptHandler.java
  type InterceptHandler (line 31) | public interface InterceptHandler {
    method getID (line 41) | String getID();
    method getInterceptedMessageTypes (line 49) | Class<?>[] getInterceptedMessageTypes();
    method onConnect (line 51) | void onConnect(InterceptConnectMessage msg);
    method onDisconnect (line 53) | void onDisconnect(InterceptDisconnectMessage msg);
    method onConnectionLost (line 55) | void onConnectionLost(InterceptConnectionLostMessage msg);
    method onPublish (line 57) | void onPublish(InterceptPublishMessage msg);
    method onMessageAcknowledged (line 59) | void onMessageAcknowledged(InterceptAcknowledgedMessage msg);

FILE: broker/src/main/java/io/moquette/interception/Interceptor.java
  type Interceptor (line 33) | public interface Interceptor {
    method notifyClientConnected (line 35) | void notifyClientConnected(MqttConnectMessage msg);
    method notifyClientDisconnected (line 37) | void notifyClientDisconnected(String clientID, String username);
    method notifyClientConnectionLost (line 39) | void notifyClientConnectionLost(String clientID, String username);
    method notifyMessageAcknowledged (line 41) | void notifyMessageAcknowledged(InterceptAcknowledgedMessage msg);
    method addInterceptHandler (line 43) | void addInterceptHandler(InterceptHandler interceptHandler);
    method removeInterceptHandler (line 45) | void removeInterceptHandler(InterceptHandler interceptHandler);

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptAbstractMessage.java
  class InterceptAbstractMessage (line 22) | public abstract class InterceptAbstractMessage implements InterceptMessa...
    method InterceptAbstractMessage (line 26) | InterceptAbstractMessage(MqttMessage msg) {
    method isRetainFlag (line 30) | public boolean isRetainFlag() {
    method isDupFlag (line 34) | public boolean isDupFlag() {
    method getQos (line 38) | public MqttQoS getQos() {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptAcknowledgedMessage.java
  class InterceptAcknowledgedMessage (line 21) | public class InterceptAcknowledgedMessage implements InterceptMessage {
    method InterceptAcknowledgedMessage (line 28) | public InterceptAcknowledgedMessage(StoredMessage msg, String topic, S...
    method getMsg (line 35) | public StoredMessage getMsg() {
    method getUsername (line 39) | public String getUsername() {
    method getTopic (line 43) | public String getTopic() {
    method getPacketID (line 47) | public int getPacketID() {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptConnectMessage.java
  class InterceptConnectMessage (line 21) | public class InterceptConnectMessage extends InterceptAbstractMessage {
    method InterceptConnectMessage (line 25) | public InterceptConnectMessage(MqttConnectMessage msg) {
    method getClientID (line 30) | public String getClientID() {
    method isCleanSession (line 34) | public boolean isCleanSession() {
    method getKeepAlive (line 38) | public int getKeepAlive() {
    method isPasswordFlag (line 42) | public boolean isPasswordFlag() {
    method getProtocolVersion (line 46) | public byte getProtocolVersion() {
    method getProtocolName (line 50) | public String getProtocolName() {
    method isUserFlag (line 54) | public boolean isUserFlag() {
    method isWillFlag (line 58) | public boolean isWillFlag() {
    method getWillQos (line 62) | public byte getWillQos() {
    method isWillRetain (line 66) | public boolean isWillRetain() {
    method getUsername (line 70) | public String getUsername() {
    method getPassword (line 74) | public byte[] getPassword() {
    method getWillTopic (line 78) | public String getWillTopic() {
    method getWillMessage (line 82) | public byte[] getWillMessage() {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptConnectionLostMessage.java
  class InterceptConnectionLostMessage (line 19) | public class InterceptConnectionLostMessage implements InterceptMessage {
    method InterceptConnectionLostMessage (line 24) | public InterceptConnectionLostMessage(String clientID, String username) {
    method getClientID (line 29) | public String getClientID() {
    method getUsername (line 33) | public String getUsername() {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptDisconnectMessage.java
  class InterceptDisconnectMessage (line 19) | public class InterceptDisconnectMessage implements InterceptMessage {
    method InterceptDisconnectMessage (line 24) | public InterceptDisconnectMessage(String clientID, String username) {
    method getClientID (line 29) | public String getClientID() {
    method getUsername (line 33) | public String getUsername() {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptMessage.java
  type InterceptMessage (line 22) | public interface InterceptMessage {

FILE: broker/src/main/java/io/moquette/interception/messages/InterceptPublishMessage.java
  class InterceptPublishMessage (line 22) | public class InterceptPublishMessage extends InterceptAbstractMessage {
    method InterceptPublishMessage (line 28) | public InterceptPublishMessage(MqttPublishMessage msg, String clientID...
    method getTopicName (line 35) | public String getTopicName() {
    method getPayload (line 39) | public ByteBuf getPayload() {
    method getClientID (line 43) | public String getClientID() {
    method getUsername (line 47) | public String getUsername() {

FILE: broker/src/main/java/io/moquette/logging/LoggingUtils.java
  class LoggingUtils (line 23) | public final class LoggingUtils {
    method getInterceptorIds (line 25) | public static <T extends InterceptHandler> Collection<String> getInter...
    method LoggingUtils (line 33) | private LoggingUtils() {

FILE: broker/src/main/java/io/moquette/persistence/ChannelLoader.java
  class ChannelLoader (line 18) | public class ChannelLoader implements MapStore<String, WFCMessage.Channe...
    method store (line 19) | @Override
    method storeAll (line 24) | @Override
    method delete (line 29) | @Override
    method deleteAll (line 34) | @Override
    method getDatabaseStore (line 39) | private DatabaseStore getDatabaseStore() {
    method load (line 43) | @Override
    method loadAll (line 48) | @Override
    method loadAllKeys (line 53) | @Override

FILE: broker/src/main/java/io/moquette/persistence/ChatroomLoader.java
  class ChatroomLoader (line 18) | public class ChatroomLoader implements MapStore<String, WFCMessage.Chatr...
    method getDatabaseStore (line 19) | private DatabaseStore getDatabaseStore() {
    method load (line 31) | @Override
    method loadAll (line 49) | @Override
    method loadAllKeys (line 54) | @Override
    method store (line 59) | @Override
    method storeAll (line 64) | @Override
    method delete (line 69) | @Override
    method deleteAll (line 74) | @Override

FILE: broker/src/main/java/io/moquette/persistence/DatabaseStore.java
  class DatabaseStore (line 46) | public class DatabaseStore {
    method setDisableRemoteMessageSearch (line 52) | public void setDisableRemoteMessageSearch(boolean disableRemoteMessage...
    method setEncryptMessage (line 56) | public void setEncryptMessage(boolean encryptMessage) {
    method DatabaseStore (line 60) | public DatabaseStore(ThreadPoolExecutorWrapper scheduler) {
    method reloadUserMessageMaps (line 69) | TreeMap<Long, Long> reloadUserMessageMaps(String userId) {
    method updateSystemSetting (line 101) | boolean updateSystemSetting(int id, String value, String desc) {
    method getSystemSetting (line 134) | SystemSettingPojo getSystemSetting(int id) {
    method searchUserByNameMobileUserId (line 174) | List<WFCMessage.User> searchUserByNameMobileUserId(String keyword, int...
    method searchUserByDisplayName (line 421) | List<WFCMessage.User> searchUserByDisplayName(String keyword, int user...
    method searchUserFromDB (line 547) | List<WFCMessage.User> searchUserFromDB(String keyword, int searchType,...
    method getUserStatus (line 562) | Integer getUserStatus(String userId) {
    method reloadGroupMemberFromDB (line 586) | synchronized Collection<WFCMessage.GroupMember>  reloadGroupMemberFrom...
    method reloadFriendsFromDB (line 648) | void reloadFriendsFromDB(HazelcastInstance hzInstance) {
    method reloadFriendRequestsFromDB (line 703) | void reloadFriendRequestsFromDB(HazelcastInstance hzInstance) {
    method persistMessage (line 766) | void persistMessage(final WFCMessage.Message message, boolean update) {
    method encryptMessageContent (line 839) | byte[] encryptMessageContent(byte[] in, boolean force) {
    method persistSensitiveMessage (line 848) | void persistSensitiveMessage(final WFCMessage.Message message) {
    method getMessages (line 899) | Map<Long, MessageBundle> getMessages(Collection<Long> keys) {
    method toByteArray (line 979) | public byte[] toByteArray(InputStream input) throws IOException {
    method getMessage (line 989) | MessageBundle getMessage(long messageId) {
    method deleteMessage (line 1026) | void deleteMessage(long messageId) {
    method loadRemoteMessages (line 1045) | List<WFCMessage.Message> loadRemoteMessages(String user, WFCMessage.Co...
    method loadRemoteMessagesFromTable (line 1072) | boolean loadRemoteMessagesFromTable(String user, WFCMessage.Conversati...
    method persistUserMessage (line 1185) | void persistUserMessage(final String userId, final  String sender, fin...
    method getPrivateChatUserMessageTarget (line 1216) | String getPrivateChatUserMessageTarget(int conversationType, String ta...
    method clearUserMessage (line 1224) | void clearUserMessage(final String userId) {
    method removeFavGroup (line 1258) | void removeFavGroup(final String groupId, final List<String> memberIds) {
    method persistUserSetting (line 1295) | void persistUserSetting(final String userId, WFCMessage.UserSettingEnt...
    method clearUserSetting (line 1333) | void clearUserSetting(final String userId) {
    method getPersistUserSetting (line 1358) | List<WFCMessage.UserSettingEntry> getPersistUserSetting(final String u...
    method removeGroupUserSettings (line 1415) | void removeGroupUserSettings(String groupId, List<String> users) {
    method persistGroupInfo (line 1448) | void persistGroupInfo(final WFCMessage.GroupInfo groupInfo) {
    method getUserActivedSessions (line 1523) | List<MemorySessionStore.Session> getUserActivedSessions(String uid) {
    method clearUserSessions (line 1567) | void clearUserSessions(String uid) {
    method getSession (line 1588) | MemorySessionStore.Session getSession(String uid, String clientId, Cli...
    method clearOtherSessionToken (line 1629) | void clearOtherSessionToken(String cid, String token, int pushType, bo...
    method updateSessionToken (line 1662) | void updateSessionToken(String uid, String cid, String token, int push...
    method updateSessionDeleted (line 1701) | void updateSessionDeleted(String uid, String cid, int deleted) {
    method updateSessionPlatform (line 1728) | void updateSessionPlatform(String uid, String cid, int platform) {
    method strEqual (line 1755) | private boolean strEqual(String left, String right) {
    method updateSession (line 1763) | void updateSession(String uid, String cid, MemorySessionStore.Session ...
    method updateSessionIp (line 1835) | void updateSessionIp(String uid, String cid, String ip) {
    method clearMultiEndpoint (line 1860) | void clearMultiEndpoint(String uid, String clientId, int platform) {
    method clearMultiUser (line 1928) | void clearMultiUser(String uid, String clientId) {
    method createSession (line 1957) | MemorySessionStore.Session createSession(String uid, String clientId, ...
    method getUserGroupIds (line 1999) | Set<String> getUserGroupIds(String userId) {
    method getUserGroupIds (line 2027) | Set<String> getUserGroupIds(String userId, List<Integer> memberTypes) {
    method getCommonGroupIds (line 2066) | Set<String> getCommonGroupIds(String userId1, String userId2) {
    method updateGroupMemberDt (line 2095) | void updateGroupMemberDt(final String groupId, final long dt) {
    method updateGroupMemberCountDt (line 2120) | void updateGroupMemberCountDt(final String groupId) {
    method persistGroupMember (line 2143) | void persistGroupMember(final String groupId, final List<WFCMessage.Gr...
    method removeGroupMember (line 2208) | int removeGroupMember(String groupId, List<String> groupMembers) {
    method getPersistGroupInfo (line 2245) | WFCMessage.GroupInfo getPersistGroupInfo(String groupId) {
    method updateChatroomInfo (line 2335) | void updateChatroomInfo(String chatroomId, WFCMessage.ChatroomInfo cha...
    method removeChatroomInfo (line 2387) | void removeChatroomInfo(String chatroomId) {
    method getPersistChatroomInfo (line 2411) | WFCMessage.ChatroomInfo getPersistChatroomInfo(String chatroomId) {
    method updateUserPassword (line 2477) | void updateUserPassword(final String userId, final String password) {
    method deleteUser (line 2511) | void deleteUser(final String userId) {
    method deleteRobot (line 2534) | void deleteRobot(String robotId) {
    method getRobot (line 2555) | WFCMessage.Robot getRobot(String robotId) {
    method updateRobot (line 2612) | void updateRobot(final WFCMessage.Robot robot) {
    method isUidAndNameConflict (line 2664) | boolean isUidAndNameConflict(String uid, String name) {
    method updateUser (line 2691) | void updateUser(final WFCMessage.User user) throws Exception {
    method deleteUserStatus (line 2771) | void deleteUserStatus(String userId) {
    method updateUserStatus (line 2790) | void updateUserStatus(String userId, int status) {
    method getGeneratedId (line 2823) | int getGeneratedId() {
    method getPersistUser (line 2863) | WFCMessage.User getPersistUser(String userId) {
    method getUserIdByName (line 2955) | String getUserIdByName(String name) {
    method getUserIdByMobile (line 2978) | String getUserIdByMobile(String mobile) {
    method getUserInfosByEmail (line 3001) | List<WFCMessage.User> getUserInfosByEmail(String email) {
    method getAllUsers (line 3094) | List<WFCMessage.User> getAllUsers(int count, int offset) {
    method getUserRobotIds (line 3191) | List<String> getUserRobotIds(String userId) {
    method getAllEnds (line 3219) | Set<String> getAllEnds(boolean fromUserTable) {
    method getPersistFriends (line 3249) | List<FriendData> getPersistFriends(String userId) {
    method removeUserFriend (line 3288) | void removeUserFriend(String userId) {
    method removeUserFriendRequest (line 3311) | void removeUserFriendRequest(String userId) {
    method getPersistFriendRequests (line 3333) | List<WFCMessage.FriendRequest> getPersistFriendRequests(String userId) {
    method persistFriendRequestUnreadStatus (line 3407) | void persistFriendRequestUnreadStatus(String userId, long readDt, long...
    method persistOrUpdateFriendRequest (line 3436) | void persistOrUpdateFriendRequest(final WFCMessage.FriendRequest reque...
    method persistOrUpdateFriendData (line 3478) | void persistOrUpdateFriendData(final FriendData request) {
    method removeGroupInfoFromDB (line 3517) | boolean removeGroupInfoFromDB(String groupId) {
    method removeGroupMemberFromDB (line 3543) | boolean removeGroupMemberFromDB(String groupId) {
    method updateChannelInfo (line 3564) | void updateChannelInfo(final WFCMessage.ChannelInfo channelInfo) {
    method removeChannelInfo (line 3641) | void removeChannelInfo(final String channelId) {
    method getPersistChannelInfo (line 3665) | WFCMessage.ChannelInfo getPersistChannelInfo(String channelId) {
    method persistChannelListener (line 3762) | void persistChannelListener(final String groupId, final List<String> m...
    method getChannelListener (line 3806) | List<String> getChannelListener(String channelId) {
    method searchChannelFromDB (line 3837) | List<WFCMessage.ChannelInfo> searchChannelFromDB(String keyword, boole...
    method updateChannelListener (line 3933) | void updateChannelListener(final String channelId, final String listen...
    method getUserChannels (line 3975) | List<String> getUserChannels(String userId) {
    method clearChannelListener (line 4006) | void clearChannelListener(final String channelId) {
    method getSensitiveWord (line 4026) | public Set<String> getSensitiveWord() {
    method deleteSensitiveWord (line 4053) | void deleteSensitiveWord(final String word) {
    method persistSensitiveWord (line 4077) | void persistSensitiveWord(final String word) {
    method getUserMessageTable (line 4100) | private String getUserMessageTable(String uid) {

FILE: broker/src/main/java/io/moquette/persistence/GroupLoader.java
  class GroupLoader (line 19) | public class GroupLoader implements MapStore<String, WFCMessage.GroupInf...
    method getDatabaseStore (line 20) | private DatabaseStore getDatabaseStore() {
    method load (line 32) | @Override
    method loadAll (line 50) | @Override
    method loadAllKeys (line 56) | @Override
    method store (line 61) | @Override
    method storeAll (line 66) | @Override
    method delete (line 73) | @Override
    method deleteAll (line 78) | @Override

FILE: broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java
  class MemoryMessagesStore (line 83) | public class MemoryMessagesStore implements IMessagesStore {
    method removeEldestEntry (line 147) | @Override
    method MemoryMessagesStore (line 233) | MemoryMessagesStore(Server server, DatabaseStore databaseStore) {
    method printMissConfigLog (line 722) | private void printMissConfigLog(String config, String defaultValue) {
    method initStore (line 726) | @Override
    method loadGroupMemberFromDB (line 731) | private Collection<WFCMessage.GroupMember> loadGroupMemberFromDB(Hazel...
    method updateSensitiveWord (line 736) | private void updateSensitiveWord() {
    method getDatabaseStore (line 751) | @Override
    method storeMessage (line 756) | @Override
    method storeSensitiveMessage (line 772) | @Override
    method getNotifyReceivers (line 778) | @Override
    method increaseUnreceivedMsgCount (line 927) | @Override
    method getUnreceivedMsgCount (line 932) | @Override
    method getAllEnds (line 937) | @Override
    method fetchMessage (line 941) | @Override
    method loadRemoteMessages (line 1086) | @Override
    method clearChatroomMembers (line 1120) | public void clearChatroomMembers(String chatroomId) {
    method getChatroomMembers (line 1129) | @Override
    method getUserChatroom (line 1136) | @Override
    method fetchChatroomMessage (line 1158) | @Override
    method insertUserMessages (line 1227) | @Override
    method getChatroomMemberClient (line 1272) | @Override
    method checkUserClientInChatroom (line 1296) | @Override
    method insertChatroomMessages (line 1344) | @Override
    method canAddGroupMembers (line 1380) | @Override
    method createGroup (line 1473) | @Override
    method callbackGroupEvent (line 1556) | private void callbackGroupEvent(String operatorId, String groupId, int...
    method callbackGroupMemberEvent (line 1591) | private void callbackGroupMemberEvent(String operatorId, String groupI...
    method callbackRelationEvent (line 1610) | private void callbackRelationEvent(String userId, String targetId, int...
    method callbackUserInfoEvent (line 1628) | private void callbackUserInfoEvent(WFCMessage.User user) {
    method callbackChannelInfoUpdateEvent (line 1641) | private void callbackChannelInfoUpdateEvent(String operatorId, String ...
    method callbackChatroomInfoUpdateEvent (line 1658) | private void callbackChatroomInfoUpdateEvent(String chatroomId, int ty...
    method callbackChatroomMemberEvent (line 1674) | private void callbackChatroomMemberEvent(String operatorId, String cha...
    method addGroupMembers (line 1692) | @Override
    method kickoffGroupMembers (line 1838) | @Override
    method removeGroupMember (line 1848) | void removeGroupMember(String groupId, List<String> memberIds) {
    method removeFavGroup (line 1859) | void removeFavGroup(String groupId, List<String> memberIds) {
    method quitGroup (line 1875) | @Override
    method clearUserGroups (line 1947) | @Override
    method removeGroupUserSettings (line 1959) | private void removeGroupUserSettings(String groupId, List<String> user...
    method dismissGroup (line 1974) | @Override
    method modifyGroupInfo (line 2020) | @Override
    method modifyGroupMemberAlias (line 2132) | @Override
    method modifyGroupMemberExtra (line 2217) | @Override
    method getGroupInfos (line 2302) | @Override
    method getGroupInfo (line 2328) | @Override
    method getUserGroupIds (line 2337) | @Override
    method getUserGroupIds (line 2342) | @Override
    method getCommonGroupIds (line 2347) | @Override
    method getGroupMembers (line 2352) | @Override
    method getGroupMember (line 2396) | @Override
    method transferGroup (line 2419) | @Override
    method setGroupManager (line 2489) | @Override
    method isMemberInGroup (line 2531) | @Override
    method canSendMessageInGroup (line 2549) | @Override
    method getGroupManagers (line 2595) | @Override
    method recallMessage (line 2614) | @Override
    method recallCastMessage (line 2770) | public ErrorCode recallCastMessage(long messageUid, String operatorId) {
    method clearUserMessages (line 2790) | @Override
    method getRobot (line 2803) | @Override
    method addRobot (line 2810) | @Override
    method destroyRobot (line 2817) | @Override
    method getUserInfo (line 2824) | @Override
    method modifyUserInfo (line 2883) | @Override
    method forceCleanOnlineStatus (line 2974) | public void forceCleanOnlineStatus(String userId, String clientId) {
    method isOnlineValueEqual (line 2992) | private boolean isOnlineValueEqual(WFCMessage.UserSettingEntry pcentry...
    method updateUserOnlineSetting (line 3014) | @Override
    method modifyUserStatus (line 3083) | @Override
    method getUserStatus (line 3095) | @Override
    method getUserStatusList (line 3108) | @Override
    method updateUserInfo (line 3121) | @Override
    method addUserInfo (line 3180) | @Override
    method destroyUser (line 3193) | @Override
    method updateUserInfo (line 3232) | @Override
    method getUserInfo (line 3242) | @Override
    method getUserInfoByName (line 3254) | @Override
    method getUserInfoByMobile (line 3260) | @Override
    method getUserInfosByEmail (line 3266) | @Override
    method getUserInfoList (line 3271) | @Override
    method getUserRobotIds (line 3276) | @Override
    method isPhoneNumber (line 3296) | public static boolean isPhoneNumber(String phone) {
    method isPhoneNumberPart (line 3304) | public static boolean isPhoneNumberPart(String str) {
    method searchUser (line 3313) | @Override
    method updateSystemSetting (line 3357) | @Override
    method getSystemSetting (line 3362) | @Override
    method createChatroom (line 3367) | @Override
    method destoryChatroom (line 3398) | @Override
    method getChatroomInfo (line 3411) | @Override
    method getChatroomMemberInfo (line 3418) | @Override
    method getChatroomMemberCount (line 3452) | @Override
    method verifyToken (line 3457) | @Override
    method isAllowUserMessage (line 3480) | @Override
    method isBlacked (line 3532) | @Override
    method loadFriend (line 3556) | synchronized Collection<FriendData> loadFriend(MultiMap<String, Friend...
    method loadFriendRequest (line 3568) | synchronized Collection<WFCMessage.FriendRequest> loadFriendRequest(Mu...
    method getFriendList (line 3581) | @Override
    method clearUserFriend (line 3623) | @Override
    method getFriendRequestList (line 3648) | @Override
    method saveAddFriendRequest (line 3672) | @Override
    method SyncFriendRequestUnread (line 3770) | @Override
    method handleFriendRequest (line 3784) | @Override
    method blackUserRequest (line 3940) | @Override
    method getFriendData (line 3984) | @Override
    method setFriendAliasRequest (line 4003) | @Override
    method setFriendExtraRequest (line 4040) | @Override
    method isAllowName (line 4077) | @Override
    method handleJoinChatroom (line 4096) | @Override
    method handleQuitChatroom (line 4137) | @Override
    method checkChatroomParticipantIdelTime (line 4150) | @Override
    method ensureSecretLength (line 4162) | private String ensureSecretLength(String secret) {
    method getApplicationAuthCode (line 4171) | @Override
    method verifyApplicationAuthCode (line 4240) | @Override
    method configApplication (line 4281) | @Override
    method deleteFriend (line 4316) | @Override
    method getUserSettings (line 4358) | @Override
    method loadPersistedUserSettings (line 4437) | private List<WFCMessage.UserSettingEntry> loadPersistedUserSettings(St...
    method getUserSetting (line 4447) | @Override
    method getUserSetting (line 4473) | @Override
    method updateUserSettings (line 4502) | @Override
    method clearUserSettings (line 4555) | @Override
    method isLocked (line 4569) | @Override
    method getUserGlobalSilent (line 4578) | @Override
    method getUserVoipSilent (line 4593) | @Override
    method getUserPushHiddenDetail (line 4608) | @Override
    method getUserConversationSilent (line 4623) | @Override
    method getSilentWhenPcOnline (line 4640) | @Override
    method getTodayDate (line 4649) | private Date getTodayDate() {
    method isUserNoDisturbing (line 4658) | @Override
    method createChannel (line 4686) | @Override
    method clearUserChannels (line 4697) | @Override
    method modifyChannelInfo (line 4703) | @Override
    method transferChannel (line 4757) | @Override
    method destroyChannel (line 4784) | @Override
    method searchChannel (line 4812) | @Override
    method getListenedChannels (line 4818) | @Override
    method listenChannel (line 4822) | @Override
    method getChannelListener (line 4844) | private Collection<String> getChannelListener(String channelId) {
    method getChannelInfo (line 4862) | @Override
    method canSendMessageInChannel (line 4869) | @Override
    method checkUserInChannel (line 4892) | @Override
    method getChannelSubscriber (line 4909) | @Override
    method getOnlineUserCount (line 4914) | @Override
    method getOnlineUsers (line 4919) | @Override
    method handleSensitiveWord (line 4943) | @Override
    method addSensitiveWords (line 4949) | @Override
    method removeSensitiveWords (line 4959) | @Override
    method getAllSensitiveWords (line 4969) | @Override
    method isSensitiveOnlyMessage (line 4974) | @Override
    method getMessage (line 4979) | @Override
    method isAllowClientCustomGroupNotification (line 4990) | @Override
    method isAllowRobotCustomGroupNotification (line 4995) | @Override
    method getVisibleQuitKickoffNotification (line 5000) | @Override
    method isGroupAllowPartSuccess (line 5005) | @Override
    method getGroupForbiddenClientOperation (line 5010) | @Override
    method isForwardMessageWithClientInfo (line 5015) | @Override
    method isForwardMessageWithSenderInfo (line 5020) | @Override
    method isForwardMessageWithTargetInfo (line 5025) | @Override
    method isRobotCallbackWithClientInfo (line 5030) | @Override
    method isRobotCallbackWithSenderInfo (line 5035) | @Override
    method isRobotCallbackWithTargetInfo (line 5040) | @Override
    method isRobotMentionExternalRobot (line 5045) | @Override
    method getRobotGetUserInfoMask (line 5050) | @Override
    method isChannelCallbackWithClientInfo (line 5055) | @Override
    method isChannelCallbackWithSenderInfo (line 5060) | @Override
    method isChannelCallbackWithTargetInfo (line 5065) | @Override
    method isChannelNewCallbackFeature (line 5070) | @Override
    method isRobotAutoAcceptFriendRequest (line 5075) | @Override
    method getPushExpiredTimes (line 5080) | @Override
    method getForcePushTypes (line 5085) | @Override
    method getClientForbiddenSendTypes (line 5090) | @Override
    method getBlackListExceptionTypes (line 5095) | @Override
    method getGroupMuteExceptionTypes (line 5100) | @Override
    method getGlobalMuteExceptionTypes (line 5105) | @Override
    method getMessageHead (line 5110) | @Override
    method loadUserMessages (line 5130) | private void loadUserMessages(String user) {
    method getFriendHead (line 5143) | @Override
    method getFriendRqHead (line 5163) | @Override
    method getSettingHead (line 5184) | @Override
    method getShortUUID (line 5206) | @Override
    method checkSignature (line 5217) | @Override
    method existSignatures (line 5240) | @Override
    method storeRetained (line 5245) | @Override
    method searchMatching (line 5254) | @Override
    method cleanRetained (line 5270) | @Override
    method getName (line 5276) | public static String getName(int[] bytes) {

FILE: broker/src/main/java/io/moquette/persistence/MemorySessionStore.java
  class MemorySessionStore (line 37) | public class MemorySessionStore implements ISessionsStore {
    class Session (line 48) | public static class Session implements Comparable<Session>{
      method getDeleted (line 68) | public int getDeleted() {
      method setDeleted (line 72) | public void setDeleted(int deleted) {
      method getLastActiveTime (line 78) | public long getLastActiveTime() {
      method getLastChatroomActiveTime (line 82) | public long getLastChatroomActiveTime() {
      method refreshLastChatroomActiveTime (line 86) | public void refreshLastChatroomActiveTime() {
      method refreshLastActiveTime (line 90) | public void refreshLastActiveTime() {
      method getUnReceivedMsgs (line 94) | public int getUnReceivedMsgs() {
      method isPcClient (line 98) | public boolean isPcClient() {
      method isPadClient (line 102) | public boolean isPadClient() {
      method isTVClient (line 106) | public boolean isTVClient() {
      method getPushType (line 110) | public int getPushType() {
      method setPushType (line 114) | public void setPushType(int pushType) {
      method getDeviceName (line 118) | public String getDeviceName() {
      method setDeviceName (line 122) | public void setDeviceName(String deviceName) {
      method getDeviceVersion (line 126) | public String getDeviceVersion() {
      method setDeviceVersion (line 130) | public void setDeviceVersion(String deviceVersion) {
      method getPhoneName (line 134) | public String getPhoneName() {
      method setPhoneName (line 138) | public void setPhoneName(String phoneName) {
      method getLanguage (line 142) | public String getLanguage() {
      method setLanguage (line 146) | public void setLanguage(String language) {
      method getCarrierName (line 150) | public String getCarrierName() {
      method setCarrierName (line 154) | public void setCarrierName(String carrierName) {
      method isPullHistoryMsg (line 158) | public boolean isPullHistoryMsg() {
      method setPullHistoryMsg (line 162) | public void setPullHistoryMsg(boolean pullHistoryMsg) {
      method getUpdateDt (line 166) | public long getUpdateDt() {
      method setUpdateDt (line 170) | public void setUpdateDt(long updateDt) {
      method getIp (line 177) | public String getIp() {
      method setIp (line 181) | public void setIp(String ip) {
      method Session (line 202) | public Session(String username, String clientID, ClientSession clien...
      method getAppName (line 208) | public String getAppName() {
      method setAppName (line 212) | public void setAppName(String appName) {
      method getDeviceToken (line 216) | public String getDeviceToken() {
      method setDeviceToken (line 220) | public void setDeviceToken(String deviceToken) {
      method getPlatform (line 224) | public int getPlatform() {
      method setPlatform (line 228) | public void setPlatform(int platform) {
      method getClientID (line 232) | public String getClientID() {
      method getUsername (line 236) | public String getUsername() {
      method setUsername (line 240) | public void setUsername(String username) {
      method getClientSession (line 244) | public ClientSession getClientSession() {
      method getSecret (line 248) | public String getSecret() {
      method setSecret (line 252) | public void setSecret(String secret) {
      method getDbSecret (line 256) | public String getDbSecret() {
      method setDbSecret (line 260) | public void setDbSecret(String dbSecret) {
      method getVoipDeviceToken (line 264) | public String getVoipDeviceToken() {
      method setVoipDeviceToken (line 268) | public void setVoipDeviceToken(String voipDeviceToken) {
      method compareTo (line 272) | @Override
      method getMqttVersion (line 286) | public MqttVersion getMqttVersion() {
      method setMqttVersion (line 290) | public void setMqttVersion(MqttVersion mqttVersion) {
    method MemorySessionStore (line 300) | public MemorySessionStore(Server server, DatabaseStore databaseStore) {
    method getSession (line 338) | @Override
    method cleanDuplatedToken (line 350) | @Override
    method initStore (line 365) | @Override
    method contains (line 369) | @Override
    method updateSessionToken (line 374) | @Override
    method clearUserSession (line 379) | @Override
    method updateOrCreateUserSession (line 393) | @Override
    method kickoffUserClient (line 496) | @Override
    method loadActiveSession (line 525) | @Override
    method updateExistSession (line 566) | @Override
    method updateSessionIp (line 593) | @Override
    method sessionForClientAndUser (line 602) | @Override
    method sessionForClient (line 615) | @Override
    method loadUserSession (line 627) | @Override
    method getUserSessionSet (line 642) | private ConcurrentSkipListSet<String> getUserSessionSet(String usernam...
    method sessionForUser (line 658) | @Override
    method getAllSessions (line 673) | @Override
    method isClientOnline (line 682) | @Override
    method inFlightAck (line 687) | @Override
    method inFlight (line 692) | @Override
    method nextPacketID (line 706) | @Override
    method queue (line 720) | @Override
    method dropQueue (line 730) | @Override
    method moveInFlightToSecondPhaseAckWaiting (line 737) | @Override
    method secondPhaseAcknowledged (line 750) | @Override
    method getInflightMessagesNo (line 756) | @Override
    method inboundInflight (line 768) | @Override
    method markAsInboundInflight (line 773) | @Override
    method getPendingPublishMessagesNo (line 781) | @Override
    method getSecondPhaseAckPendingMessages (line 791) | @Override
    method kickoffPCClient (line 802) | @Override
    method disableSession (line 835) | @Override
    method cleanSession (line 848) | @Override
    method isMultiEndpointSupported (line 882) | @Override

FILE: broker/src/main/java/io/moquette/persistence/MemoryStorageService.java
  class MemoryStorageService (line 28) | public class MemoryStorageService implements IStore {
    method MemoryStorageService (line 33) | public MemoryStorageService(IConfig props, ThreadPoolExecutorWrapper s...
    method messagesStore (line 39) | @Override
    method sessionsStore (line 44) | @Override
    method initStore (line 49) | @Override
    method close (line 55) | @Override

FILE: broker/src/main/java/io/moquette/persistence/MessageLoader.java
  class MessageLoader (line 18) | public class MessageLoader implements MapStore<Long, MessageBundle> {
    method getDatabaseStore (line 19) | private DatabaseStore getDatabaseStore() {
    method load (line 30) | @Override
    method loadAll (line 48) | @Override
    method loadAllKeys (line 63) | @Override
    method store (line 68) | @Override
    method storeAll (line 73) | @Override
    method delete (line 78) | @Override
    method deleteAll (line 83) | @Override

FILE: broker/src/main/java/io/moquette/persistence/RobotLoader.java
  class RobotLoader (line 18) | public class RobotLoader implements MapStore<String, WFCMessage.Robot> {
    method store (line 19) | @Override
    method storeAll (line 24) | @Override
    method delete (line 29) | @Override
    method deleteAll (line 34) | @Override
    method getDatabaseStore (line 39) | private DatabaseStore getDatabaseStore() {
    method load (line 43) | @Override
    method loadAll (line 48) | @Override
    method loadAllKeys (line 53) | @Override

FILE: broker/src/main/java/io/moquette/persistence/ServerAPIHelper.java
  class ServerAPIHelper (line 20) | public class ServerAPIHelper {
    method init (line 30) | public static void init(Server s) {
    type Callback (line 34) | public interface Callback {
      method onSuccess (line 35) | void onSuccess(byte[] response);
      method onError (line 36) | void onError(ErrorCode errorCode);
      method onTimeout (line 37) | void onTimeout();
      method getResponseExecutor (line 38) | Executor getResponseExecutor();
    method sendRequest (line 41) | public static void sendRequest(String fromUser, String clientId, Strin...
    method sendResponse (line 57) | public static void sendResponse(int errorCode, byte[] message, String ...

FILE: broker/src/main/java/io/moquette/persistence/UserClientEntry.java
  class UserClientEntry (line 13) | public class UserClientEntry implements Serializable {
    method UserClientEntry (line 14) | public UserClientEntry(String userId, String clientId) {

FILE: broker/src/main/java/io/moquette/persistence/UserLoader.java
  class UserLoader (line 19) | public class UserLoader implements MapStore<String, WFCMessage.User> {
    method store (line 20) | @Override
    method storeAll (line 25) | @Override
    method delete (line 30) | @Override
    method deleteAll (line 35) | @Override
    method getDatabaseStore (line 40) | private DatabaseStore getDatabaseStore() {
    method load (line 44) | @Override
    method loadAll (line 49) | @Override
    method loadAllKeys (line 54) | @Override

FILE: broker/src/main/java/io/moquette/persistence/UserStatusLoader.java
  class UserStatusLoader (line 17) | public class UserStatusLoader implements MapStore<String, Integer> {
    method store (line 18) | @Override
    method storeAll (line 23) | @Override
    method delete (line 28) | @Override
    method deleteAll (line 33) | @Override
    method getDatabaseStore (line 38) | private DatabaseStore getDatabaseStore() {
    method load (line 42) | @Override
    method loadAll (line 47) | @Override
    method loadAllKeys (line 52) | @Override

FILE: broker/src/main/java/io/moquette/persistence/remote/RequestInfo.java
  class RequestInfo (line 18) | public class RequestInfo {
    method RequestInfo (line 28) | public RequestInfo(String fromUser, String clientId, ServerAPIHelper.C...

FILE: broker/src/main/java/io/moquette/server/ConnectionDescriptor.java
  class ConnectionDescriptor (line 36) | public class ConnectionDescriptor {
    type ConnectionState (line 40) | public enum ConnectionState {
    method ConnectionDescriptor (line 56) | public ConnectionDescriptor(String clientID, Channel session) {
    method writeAndFlush (line 61) | public void writeAndFlush(Object payload) {
    method setupAutoFlusher (line 65) | public void setupAutoFlusher(int flushIntervalMs) {
    method doesNotUseChannel (line 78) | public boolean doesNotUseChannel(Channel channel) {
    method close (line 82) | public boolean close() {
    method getUsername (line 92) | public String getUsername() {
    method abort (line 96) | public void abort() {
    method assignState (line 106) | public boolean assignState(ConnectionState expected, ConnectionState n...
    method toString (line 124) | @Override
    method equals (line 130) | @Override
    method getBytesMetrics (line 144) | public BytesMetrics getBytesMetrics() {
    method getMessageMetrics (line 148) | public MessageMetrics getMessageMetrics() {
    method hashCode (line 152) | @Override
    method getChannel (line 159) | public Channel getChannel() {

FILE: broker/src/main/java/io/moquette/server/ConnectionDescriptorStore.java
  class ConnectionDescriptorStore (line 37) | public class ConnectionDescriptorStore implements IConnectionsManager {
    method ConnectionDescriptorStore (line 44) | public ConnectionDescriptorStore(ISessionsStore sessionsStore) {
    method sendMessage (line 49) | public boolean sendMessage(MqttMessage message, Integer messageID, Str...
    method addConnection (line 84) | public ConnectionDescriptor addConnection(ConnectionDescriptor descrip...
    method removeConnection (line 88) | public boolean removeConnection(ConnectionDescriptor descriptor) {
    method getConnection (line 92) | public ConnectionDescriptor getConnection(String clientID) {
    method isConnected (line 96) | @Override
    method getActiveConnectionsNo (line 101) | @Override
    method getConnectedClientIds (line 106) | @Override
    method closeConnection (line 111) | @Override
    method getSessionStatus (line 127) | @Override
    method getSessions (line 138) | @Override
    method buildMqttSession (line 148) | private MqttSession buildMqttSession(ClientSession session) {

FILE: broker/src/main/java/io/moquette/server/Constants.java
  class Constants (line 22) | public final class Constants {
    method Constants (line 32) | private Constants() {

FILE: broker/src/main/java/io/moquette/server/DefaultMoquetteSslContextCreator.java
  class DefaultMoquetteSslContextCreator (line 37) | public class DefaultMoquetteSslContextCreator implements ISslContextCrea...
    method DefaultMoquetteSslContextCreator (line 43) | public DefaultMoquetteSslContextCreator(IConfig props) {
    method initSSLContext (line 47) | @Override
    method jksDatastore (line 115) | private InputStream jksDatastore(String jksPath) throws FileNotFoundEx...

FILE: broker/src/main/java/io/moquette/server/Server.java
  class Server (line 67) | public class Server {
    method getServer (line 80) | public static Server getServer() {
    method Server (line 108) | public Server() {
    method start (line 112) | public static void start(String[] args) throws IOException {
    method startServer (line 152) | public void startServer() throws IOException {
    method defaultConfig (line 157) | public static IConfig defaultConfig() {
    method defaultConfigFile (line 164) | private static File defaultConfigFile() {
    method startServer (line 178) | public void startServer(File configFile) throws IOException {
    method startServer (line 194) | public void startServer(Properties configProps) throws IOException {
    method startServer (line 208) | public void startServer(IConfig config) throws IOException {
    method startServer (line 224) | public void startServer(IConfig config, List<? extends InterceptHandle...
    method startServer (line 229) | public void startServer(IConfig config, List<? extends InterceptHandle...
    method initStore (line 281) | private IStore initStore(IConfig props, Server server) {
    method instantiateConfiguredStore (line 290) | private IStore instantiateConfiguredStore(IConfig props,
    method getStore (line 295) | public IStore getStore() {
    method initMediaServerConfig (line 299) | private void initMediaServerConfig(IConfig config) {
    method getServerIp (line 368) | private String getServerIp(IConfig config) {
    method configureCluster (line 380) | private boolean configureCluster(IConfig config) throws FileNotFoundEx...
    method getServerIp (line 422) | public String getServerIp() {
    method getLongPort (line 426) | public String getLongPort() {
    method getShortPort (line 430) | public String getShortPort() {
    method getHazelcastInstance (line 434) | public HazelcastInstance getHazelcastInstance() {
    method onApiMessage (line 438) | public void onApiMessage(String fromUser, String clientId, byte[] mess...
    method isShutdowning (line 443) | public boolean isShutdowning() {
    method stopServer (line 447) | public void stopServer() {
    method addInterceptHandler (line 479) | public void addInterceptHandler(InterceptHandler interceptHandler) {
    method removeInterceptHandler (line 495) | public void removeInterceptHandler(InterceptHandler interceptHandler) {
    method getConfig (line 505) | public IConfig getConfig() {
    method getConnectionsManager (line 514) | public IConnectionsManager getConnectionsManager() {
    method getProcessor (line 518) | public ProtocolProcessor getProcessor() {
    method getDbScheduler (line 522) | public ThreadPoolExecutorWrapper getDbScheduler() {
    method getImBusinessScheduler (line 526) | public ThreadPoolExecutorWrapper getImBusinessScheduler() {
    method getCallbackScheduler (line 530) | public ThreadPoolExecutorWrapper getCallbackScheduler() {
    method getRunTime (line 533) | public long getRunTime() {

FILE: broker/src/main/java/io/moquette/server/ServerAcceptor.java
  type ServerAcceptor (line 24) | public interface ServerAcceptor {
    method initialize (line 26) | void initialize(ProtocolProcessor processor, IConfig props, ISslContex...
    method close (line 28) | void close();

FILE: broker/src/main/java/io/moquette/server/config/ClasspathResourceLoader.java
  class ClasspathResourceLoader (line 25) | public class ClasspathResourceLoader implements IResourceLoader {
    method ClasspathResourceLoader (line 32) | public ClasspathResourceLoader() {
    method ClasspathResourceLoader (line 36) | public ClasspathResourceLoader(String defaultResource) {
    method ClasspathResourceLoader (line 40) | public ClasspathResourceLoader(String defaultResource, ClassLoader cla...
    method loadDefaultResource (line 45) | @Override
    method loadResource (line 50) | @Override
    method getName (line 57) | @Override

FILE: broker/src/main/java/io/moquette/server/config/ConfigurationParser.java
  class ConfigurationParser (line 36) | class ConfigurationParser {
    method parse (line 45) | void parse(File file) throws ParseException {
    method parse (line 76) | void parse(Reader reader) throws ParseException {
    method getProperties (line 130) | Properties getProperties() {

FILE: broker/src/main/java/io/moquette/server/config/FileResourceLoader.java
  class FileResourceLoader (line 26) | public class FileResourceLoader implements IResourceLoader {
    method FileResourceLoader (line 33) | public FileResourceLoader() {
    method FileResourceLoader (line 37) | public FileResourceLoader(File defaultFile) {
    method FileResourceLoader (line 41) | public FileResourceLoader(String parentPath) {
    method FileResourceLoader (line 45) | public FileResourceLoader(File defaultFile, String parentPath) {
    method loadDefaultResource (line 50) | @Override
    method loadResource (line 59) | @Override
    method loadResource (line 64) | public Reader loadResource(File f) {
    method getName (line 78) | @Override

FILE: broker/src/main/java/io/moquette/server/config/IConfig.java
  class IConfig (line 24) | public abstract class IConfig {
    method setProperty (line 29) | public abstract void setProperty(String name, String value);
    method getProperty (line 31) | public abstract String getProperty(String name);
    method getProperty (line 33) | public abstract String getProperty(String name, String defaultValue);
    method assignDefaults (line 35) | void assignDefaults() {
    method getResourceLoader (line 41) | public abstract IResourceLoader getResourceLoader();

FILE: broker/src/main/java/io/moquette/server/config/IResourceLoader.java
  type IResourceLoader (line 21) | public interface IResourceLoader {
    method loadDefaultResource (line 23) | Reader loadDefaultResource();
    method loadResource (line 25) | Reader loadResource(String relativePath);
    method getName (line 27) | String getName();
    class ResourceIsDirectoryException (line 29) | class ResourceIsDirectoryException extends RuntimeException {
      method ResourceIsDirectoryException (line 33) | public ResourceIsDirectoryException(String message) {

FILE: broker/src/main/java/io/moquette/server/config/MediaServerConfig.java
  class MediaServerConfig (line 3) | public class MediaServerConfig {

FILE: broker/src/main/java/io/moquette/server/config/MemoryConfig.java
  class MemoryConfig (line 25) | public class MemoryConfig extends IConfig {
    method MemoryConfig (line 29) | public MemoryConfig(Properties properties) {
    method setProperty (line 36) | @Override
    method getProperty (line 41) | @Override
    method getProperty (line 46) | @Override
    method getResourceLoader (line 51) | @Override

FILE: broker/src/main/java/io/moquette/server/config/ResourceLoaderConfig.java
  class ResourceLoaderConfig (line 28) | public class ResourceLoaderConfig extends IConfig {
    method ResourceLoaderConfig (line 35) | public ResourceLoaderConfig(IResourceLoader resourceLoader) {
    method ResourceLoaderConfig (line 39) | public ResourceLoaderConfig(IResourceLoader resourceLoader, String con...
    method setProperty (line 83) | @Override
    method getProperty (line 88) | @Override
    method getProperty (line 93) | @Override
    method getResourceLoader (line 98) | @Override

FILE: broker/src/main/java/io/moquette/server/netty/AutoFlushHandler.java
  class AutoFlushHandler (line 32) | public class AutoFlushHandler extends ChannelDuplexHandler {
    method AutoFlushHandler (line 44) | public AutoFlushHandler(long writerIdleTime, TimeUnit unit) {
    method handlerAdded (line 51) | @Override
    method handlerRemoved (line 63) | @Override
    method channelRegistered (line 68) | @Override
    method channelActive (line 77) | @Override
    method channelInactive (line 86) | @Override
    method initialize (line 110) | private void initialize(ChannelHandlerContext ctx) {
    method destroy (line 130) | private void destroy() {
    method channelIdle (line 147) | protected void channelIdle(ChannelHandlerContext ctx/* , IdleStateEven...
    class WriterIdleTimeoutTask (line 155) | private final class WriterIdleTimeoutTask implements Runnable {
      method WriterIdleTimeoutTask (line 159) | WriterIdleTimeoutTask(ChannelHandlerContext ctx) {
      method run (line 163) | @Override

FILE: broker/src/main/java/io/moquette/server/netty/MoquetteIdleTimeoutHandler.java
  class MoquetteIdleTimeoutHandler (line 27) | @Sharable
    method userEventTriggered (line 32) | @Override

FILE: broker/src/main/java/io/moquette/server/netty/NettyAcceptor.java
  class NettyAcceptor (line 59) | public class NettyAcceptor implements ServerAcceptor {
    class PipelineInitializer (line 61) | abstract class PipelineInitializer {
      method init (line 63) | abstract void init(ChannelPipeline pipeline) throws Exception;
    method initialize (line 83) | @Override
    method initFactory (line 121) | private void initFactory(String host, int port, String protocol, final...
    method initializePlainTCPTransport (line 158) | private void initializePlainTCPTransport(final NettyMQTTHandler handler,
    method close (line 193) | public void close() {
    method createSslHandler (line 235) | private ChannelHandler createSslHandler(SSLContext sslContext, boolean...

FILE: broker/src/main/java/io/moquette/server/netty/NettyMQTTHandler.java
  class NettyMQTTHandler (line 29) | @Sharable
    method NettyMQTTHandler (line 35) | public NettyMQTTHandler(ProtocolProcessor processor) {
    method channelRead (line 39) | @Override
    method channelInactive (line 101) | @Override
    method exceptionCaught (line 111) | @Override
    method channelWritabilityChanged (line 121) | @Override

FILE: broker/src/main/java/io/moquette/server/netty/NettyUtils.java
  class NettyUtils (line 28) | public final class NettyUtils {
    method getAttribute (line 39) | public static Object getAttribute(ChannelHandlerContext ctx, Attribute...
    method keepAlive (line 44) | public static void keepAlive(Channel channel, int keepAlive) {
    method cleanSession (line 48) | public static void cleanSession(Channel channel, boolean cleanSession) {
    method cleanSession (line 52) | public static boolean cleanSession(Channel channel) {
    method clientID (line 56) | public static void clientID(Channel channel, String clientID) {
    method clientID (line 60) | public static String clientID(Channel channel) {
    method userName (line 64) | public static void userName(Channel channel, String username) {
    method userName (line 68) | public static String userName(Channel channel) {
    method NettyUtils (line 72) | private NettyUtils() {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/BytesMetrics.java
  class BytesMetrics (line 19) | public class BytesMetrics {
    method incrementRead (line 24) | void incrementRead(long numBytes) {
    method incrementWrote (line 28) | void incrementWrote(long numBytes) {
    method readBytes (line 32) | public long readBytes() {
    method wroteBytes (line 36) | public long wroteBytes() {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/BytesMetricsCollector.java
  class BytesMetricsCollector (line 24) | public class BytesMetricsCollector {
    method computeMetrics (line 29) | public BytesMetrics computeMetrics() {
    method sumReadBytes (line 36) | public void sumReadBytes(long count) {
    method sumWroteBytes (line 40) | public void sumWroteBytes(long count) {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/BytesMetricsHandler.java
  class BytesMetricsHandler (line 32) | public class BytesMetricsHandler extends ChannelDuplexHandler {
    method BytesMetricsHandler (line 39) | public BytesMetricsHandler(BytesMetricsCollector collector) {
    method channelActive (line 43) | @Override
    method channelRead (line 51) | @Override
    method write (line 58) | @Override
    method close (line 65) | @Override
    method getBytesMetrics (line 79) | public static BytesMetrics getBytesMetrics(Channel channel) {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/MQTTMessageLogger.java
  class MQTTMessageLogger (line 36) | @Sharable
    method channelRead (line 41) | @Override
    method logMQTTMessage (line 47) | private void logMQTTMessage(ChannelHandlerContext ctx, Object message,...
    method channelInactive (line 91) | @Override
    method write (line 100) | @Override

FILE: broker/src/main/java/io/moquette/server/netty/metrics/MessageMetrics.java
  class MessageMetrics (line 19) | public class MessageMetrics {
    method incrementRead (line 24) | void incrementRead(long numMessages) {
    method incrementWrote (line 28) | void incrementWrote(long numMessages) {
    method messagesRead (line 32) | public long messagesRead() {
    method messagesWrote (line 36) | public long messagesWrote() {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/MessageMetricsCollector.java
  class MessageMetricsCollector (line 24) | public class MessageMetricsCollector {
    method computeMetrics (line 29) | public MessageMetrics computeMetrics() {
    method sumReadMessages (line 36) | public void sumReadMessages(long count) {
    method sumWroteMessages (line 40) | public void sumWroteMessages(long count) {

FILE: broker/src/main/java/io/moquette/server/netty/metrics/MessageMetricsHandler.java
  class MessageMetricsHandler (line 30) | public class MessageMetricsHandler extends ChannelDuplexHandler {
    method MessageMetricsHandler (line 38) | public MessageMetricsHandler(MessageMetricsCollector collector) {
    method channelActive (line 42) | @Override
    method channelRead (line 50) | @Override
    method write (line 57) | @Override
    method close (line 64) | @Override
    method getMessageMetrics (line 78) | public static MessageMetrics getMessageMetrics(Channel channel) {

FILE: broker/src/main/java/io/moquette/spi/ClientSession.java
  class ClientSession (line 41) | public class ClientSession {
    class OutboundFlightZone (line 43) | class OutboundFlightZone {
      method waitingAck (line 51) | void waitingAck(int messageID, IMessagesStore.StoredMessage msg) {
      method acknowledged (line 58) | IMessagesStore.StoredMessage acknowledged(int messageID) {
    class InboundFlightZone (line 65) | class InboundFlightZone {
      method lookup (line 67) | public IMessagesStore.StoredMessage lookup(int messageID) {
      method waitingRel (line 71) | public void waitingRel(int messageID, IMessagesStore.StoredMessage m...
    method ClientSession (line 87) | public ClientSession(String clientID, ISessionsStore sessionsStore) {
    method queue (line 101) | public Queue<IMessagesStore.StoredMessage> queue() {
    method toString (line 106) | @Override
    method disconnect (line 112) | public void disconnect(String userId, boolean cleanSession, boolean di...
    method cleanSession (line 123) | public void cleanSession(String userId) {
    method nextPacketId (line 128) | public int nextPacketId() {
    method inFlightAcknowledged (line 132) | public IMessagesStore.StoredMessage inFlightAcknowledged(int messageID) {
    method inFlightAckWaiting (line 141) | public int inFlightAckWaiting(IMessagesStore.StoredMessage msg) {
    method secondPhaseAcknowledged (line 148) | public IMessagesStore.StoredMessage secondPhaseAcknowledged(int messag...
    method enqueue (line 158) | public void enqueue(IMessagesStore.StoredMessage message) {
    method inboundInflight (line 162) | public IMessagesStore.StoredMessage inboundInflight(int messageID) {
    method markAsInboundInflight (line 166) | public void markAsInboundInflight(int messageID, IMessagesStore.Stored...
    method moveInFlightToSecondPhaseAckWaiting (line 170) | public void moveInFlightToSecondPhaseAckWaiting(int messageID, IMessag...
    method getPendingPublishMessagesNo (line 174) | public int getPendingPublishMessagesNo() {
    method getSecondPhaseAckPendingMessages (line 178) | public int getSecondPhaseAckPendingMessages() {
    method getInflightMessagesNo (line 182) | public int getInflightMessagesNo() {

FILE: broker/src/main/java/io/moquette/spi/IMatchingCondition.java
  type IMatchingCondition (line 21) | public interface IMatchingCondition {
    method match (line 23) | boolean match(Topic key);

FILE: broker/src/main/java/io/moquette/spi/IMessagesStore.java
  type IMessagesStore (line 37) | public interface IMessagesStore {
    class StoredMessage (line 39) | class StoredMessage {
      method StoredMessage (line 48) | public StoredMessage(byte[] message, MqttQoS qos, String topic) {
      method getQos (line 54) | public MqttQoS getQos() {
      method getTopic (line 58) | public String getTopic() {
      method setGuid (line 62) | public void setGuid(MessageGUID guid) {
      method getGuid (line 66) | public MessageGUID getGuid() {
      method getClientID (line 70) | public String getClientID() {
      method setClientID (line 74) | public void setClientID(String m_clientID) {
      method getPayload (line 78) | public ByteBuf getPayload() {
      method setRetained (line 82) | public void setRetained(boolean retained) {
      method isRetained (line 86) | public boolean isRetained() {
      method toString (line 90) | @Override
    method getDatabaseStore (line 97) | DatabaseStore getDatabaseStore();
    method storeMessage (line 98) | WFCMessage.Message storeMessage(String fromUser, String fromClientId, ...
    method storeSensitiveMessage (line 99) | void storeSensitiveMessage(WFCMessage.Message message);
    method getNotifyReceivers (line 100) | int getNotifyReceivers(String fromUser, WFCMessage.Message.Builder mes...
    method getAllEnds (line 101) | Set<String> getAllEnds();
    method fetchMessage (line 102) | WFCMessage.PullMessageResult fetchMessage(String user, String exceptCl...
    method loadRemoteMessages (line 103) | WFCMessage.PullMessageResult loadRemoteMessages(String user, WFCMessag...
    method insertUserMessages (line 104) | long insertUserMessages(String sender, int conversationType, String ta...
    method canAddGroupMembers (line 105) | ErrorCode canAddGroupMembers(String operator, List<WFCMessage.GroupMem...
    method createGroup (line 106) | WFCMessage.GroupInfo createGroup(String operator, WFCMessage.GroupInfo...
    method addGroupMembers (line 107) | ErrorCode addGroupMembers(String operator, boolean isAdmin, String gro...
    method kickoffGroupMembers (line 108) | ErrorCode kickoffGroupMembers(String operator, boolean isAdmin, String...
    method quitGroup (line 109) | ErrorCode quitGroup(String operator, String groupId, boolean admin);
    method clearUserGroups (line 110) | void clearUserGroups(String userId);
    method dismissGroup (line 111) | ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin);
    method modifyGroupInfo (line 112) | ErrorCode modifyGroupInfo(String operator, String groupId, int modifyT...
    method modifyGroupMemberAlias (line 113) | ErrorCode modifyGroupMemberAlias(String operator, String groupId, Stri...
    method modifyGroupMemberExtra (line 114) | ErrorCode modifyGroupMemberExtra(String operator, String groupId, Stri...
    method getGroupInfos (line 115) | List<WFCMessage.GroupInfo> getGroupInfos(List<WFCMessage.UserRequest> ...
    method getGroupInfo (line 116) | WFCMessage.GroupInfo getGroupInfo(String groupId);
    method getUserGroupIds (line 117) | Set<String> getUserGroupIds(String userId);
    method getUserGroupIds (line 118) | Set<String> getUserGroupIds(String userId, List<Integer> types);
    method getCommonGroupIds (line 119) | Set<String> getCommonGroupIds(String userId1, String userId2);
    method getGroupMembers (line 120) | ErrorCode getGroupMembers(String fromUser, String groupId, long maxDt,...
    method getGroupMember (line 121) | WFCMessage.GroupMember getGroupMember(String groupId, String memberId);
    method transferGroup (line 122) | ErrorCode transferGroup(String operator, String groupId, String newOwn...
    method setGroupManager (line 123) | ErrorCode setGroupManager(String operator, String groupId, int type, L...
    method isMemberInGroup (line 124) | boolean isMemberInGroup(String member, String groupId);
    method canSendMessageInGroup (line 125) | ErrorCode canSendMessageInGroup(String member, String groupId);
    method getGroupManagers (line 126) | Set<String> getGroupManagers(String groupId, boolean includeOwner);
    method recallMessage (line 128) | ErrorCode recallMessage(long messageUid, String operatorId, String cli...
    method recallCastMessage (line 129) | ErrorCode recallCastMessage(long messageUid, String operatorId);
    method clearUserMessages (line 131) | void clearUserMessages(String userId);
    method getRobot (line 133) | WFCMessage.Robot getRobot(String robotId);
    method addRobot (line 134) | void addRobot(WFCMessage.Robot robot);
    method destroyRobot (line 135) | void destroyRobot(String robotId);
    method getUserInfo (line 137) | ErrorCode getUserInfo(String fromUser, List<WFCMessage.UserRequest> re...
    method modifyUserInfo (line 139) | ErrorCode modifyUserInfo(String userId, WFCMessage.ModifyMyInfoRequest...
    method forceCleanOnlineStatus (line 141) | void forceCleanOnlineStatus(String userId, String clientId);
    method updateUserOnlineSetting (line 143) | void updateUserOnlineSetting(MemorySessionStore.Session session, boole...
    method modifyUserStatus (line 145) | ErrorCode modifyUserStatus(String userId, int status);
    method getUserStatus (line 146) | int getUserStatus(String userId);
    method getUserStatusList (line 147) | List<InputOutputUserBlockStatus> getUserStatusList();
    method updateUserInfo (line 149) | ErrorCode updateUserInfo(InputOutputUserInfo userInfo, int flag);
    method addUserInfo (line 150) | void addUserInfo(WFCMessage.User user) throws Exception;
    method destroyUser (line 151) | void destroyUser(String userId);
    method updateUserInfo (line 152) | void updateUserInfo(WFCMessage.User user) throws Exception;
    method getUserInfo (line 153) | WFCMessage.User getUserInfo(String userId);
    method getUserInfoByName (line 154) | WFCMessage.User getUserInfoByName(String name);
    method getUserInfoByMobile (line 155) | WFCMessage.User getUserInfoByMobile(String mobile);
    method getUserInfosByEmail (line 156) | List<WFCMessage.User> getUserInfosByEmail(String email);
    method searchUser (line 157) | ErrorCode searchUser(String userId, String keyword, int searchType, in...
    method getUserInfoList (line 159) | List<WFCMessage.User> getUserInfoList(int count, int offset);
    method getUserRobotIds (line 160) | List<String> getUserRobotIds(String userId);
    method updateSystemSetting (line 162) | boolean updateSystemSetting(int id, String value, String desc);
    method getSystemSetting (line 163) | SystemSettingPojo getSystemSetting(int id);
    method createChatroom (line 164) | void createChatroom(String chatroomId, WFCMessage.ChatroomInfo chatroo...
    method destoryChatroom (line 165) | void destoryChatroom(String chatroomId);
    method getChatroomInfo (line 166) | WFCMessage.ChatroomInfo getChatroomInfo(String chatroomId);
    method getChatroomMemberInfo (line 167) | WFCMessage.ChatroomMemberInfo getChatroomMemberInfo(String chatroomId,...
    method getChatroomMemberCount (line 168) | int getChatroomMemberCount(String chatroomId);
    method getChatroomMemberClient (line 169) | Collection<String> getChatroomMemberClient(String userId);
    method checkUserClientInChatroom (line 170) | boolean checkUserClientInChatroom(String user, String clientId, String...
    method insertChatroomMessages (line 172) | long insertChatroomMessages(String target, int line, long messageId);
    method getChatroomMembers (line 173) | Collection<UserClientEntry> getChatroomMembers(String chatroomId);
    method getUserChatroom (line 174) | OutputUserChatroom getUserChatroom(String userId);
    method fetchChatroomMessage (line 175) | WFCMessage.PullMessageResult fetchChatroomMessage(String fromUser, Str...
    method verifyToken (line 177) | ErrorCode verifyToken(String userId, String token, List<String> server...
    method getFriendList (line 179) | List<FriendData> getFriendList(String userId, String clientId, long ve...
    method clearUserFriend (line 180) | void clearUserFriend(String userId);
    method getFriendRequestList (line 181) | List<WFCMessage.FriendRequest> getFriendRequestList(String userId, lon...
    method saveAddFriendRequest (line 183) | ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequ...
    method handleFriendRequest (line 184) | ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRe...
    method deleteFriend (line 185) | ErrorCode deleteFriend(String userId, String friendUid, long[] head);
    method blackUserRequest (line 186) | ErrorCode blackUserRequest(String fromUser, String targetUserId, int s...
    method getFriendData (line 187) | FriendData getFriendData(String fromUser, String targetUserId);
    method SyncFriendRequestUnread (line 188) | ErrorCode SyncFriendRequestUnread(String userId, long unreadDt, long[]...
    method isAllowUserMessage (line 189) | ErrorCode isAllowUserMessage(String fromUser, String userId, int line);
    method isBlacked (line 190) | ErrorCode isBlacked(String fromUser, String userId);
    method setFriendAliasRequest (line 191) | ErrorCode setFriendAliasRequest(String fromUser, String targetUserId, ...
    method setFriendExtraRequest (line 192) | ErrorCode setFriendExtraRequest(String fromUser, String targetUserId, ...
    method isAllowName (line 194) | boolean isAllowName(String name);
    method handleJoinChatroom (line 196) | ErrorCode handleJoinChatroom(String userId, String clientId, String ch...
    method handleQuitChatroom (line 197) | ErrorCode handleQuitChatroom(String userId, String clientId, String ch...
    method checkChatroomParticipantIdelTime (line 199) | boolean checkChatroomParticipantIdelTime(MemorySessionStore.Session se...
    method getApplicationAuthCode (line 202) | String getApplicationAuthCode(String fromUser, String applicationId, i...
    method verifyApplicationAuthCode (line 203) | String verifyApplicationAuthCode(String token, String applicationId, i...
    method configApplication (line 204) | ErrorCode configApplication(String appId, int appType, long timestamp,...
    method getUserSettings (line 206) | ErrorCode getUserSettings(String userId, long version, WFCMessage.GetU...
    method getUserSetting (line 207) | WFCMessage.UserSettingEntry getUserSetting(String userId, int scope, S...
    method getUserSetting (line 208) | List<WFCMessage.UserSettingEntry> getUserSetting(String userId, int sc...
    method updateUserSettings (line 209) | long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq...
    method clearUserSettings (line 210) | void clearUserSettings(String userId);
    method isLocked (line 212) | boolean isLocked(String userId, String clientId);
    method getUserGlobalSilent (line 214) | boolean getUserGlobalSilent(String userId);
    method getUserVoipSilent (line 215) | boolean getUserVoipSilent(String userId);
    method getUserPushHiddenDetail (line 217) | boolean getUserPushHiddenDetail(String userId);
    method getUserConversationSilent (line 218) | boolean getUserConversationSilent(String userId, WFCMessage.Conversati...
    method getSilentWhenPcOnline (line 219) | boolean getSilentWhenPcOnline(String userId);
    method isUserNoDisturbing (line 220) | boolean isUserNoDisturbing(String userId);
    method createChannel (line 221) | ErrorCode createChannel(String operator, WFCMessage.ChannelInfo channe...
    method clearUserChannels (line 222) | void clearUserChannels(String userId);
    method modifyChannelInfo (line 223) | ErrorCode modifyChannelInfo(String operator, String channelId, int mod...
    method transferChannel (line 224) | ErrorCode transferChannel(String operator, String channelId, String ne...
    method destroyChannel (line 225) | ErrorCode destroyChannel(String operator, String channelId, boolean is...
    method searchChannel (line 226) | List<WFCMessage.ChannelInfo> searchChannel(String keyword, boolean buz...
    method getListenedChannels (line 227) | List<String> getListenedChannels(String userId);
    method listenChannel (line 228) | ErrorCode listenChannel(String operator, String channelId, boolean lis...
    method getChannelInfo (line 229) | WFCMessage.ChannelInfo getChannelInfo(String channelId);
    method canSendMessageInChannel (line 230) | boolean canSendMessageInChannel(String user, String channelId);
    method checkUserInChannel (line 231) | boolean checkUserInChannel(String user, String channelId);
    method getChannelSubscriber (line 232) | Collection<String> getChannelSubscriber(String channelId);
    method getOnlineUserCount (line 234) | int getOnlineUserCount();
    method getOnlineUsers (line 235) | GetOnlineUserResult getOnlineUsers(int offset, int count);
    method handleSensitiveWord (line 237) | Set<String> handleSensitiveWord(String message);
    method addSensitiveWords (line 238) | boolean addSensitiveWords(List<String> words);
    method removeSensitiveWords (line 239) | boolean removeSensitiveWords(List<String> words);
    method getAllSensitiveWords (line 240) | List<String> getAllSensitiveWords();
    method isSensitiveOnlyMessage (line 241) | boolean isSensitiveOnlyMessage();
    method getMessage (line 243) | WFCMessage.Message getMessage(long messageId);
    method increaseUnreceivedMsgCount (line 245) | void increaseUnreceivedMsgCount(String user);
    method getUnreceivedMsgCount (line 246) | int getUnreceivedMsgCount(String user);
    method isAllowClientCustomGroupNotification (line 248) | boolean isAllowClientCustomGroupNotification();
    method isAllowRobotCustomGroupNotification (line 249) | boolean isAllowRobotCustomGroupNotification();
    method getVisibleQuitKickoffNotification (line 250) | int getVisibleQuitKickoffNotification();
    method getGroupForbiddenClientOperation (line 252) | int getGroupForbiddenClientOperation();
    method isForwardMessageWithClientInfo (line 254) | boolean isForwardMessageWithClientInfo();
    method isForwardMessageWithSenderInfo (line 255) | boolean isForwardMessageWithSenderInfo();
    method isForwardMessageWithTargetInfo (line 256) | boolean isForwardMessageWithTargetInfo();
    method isRobotCallbackWithClientInfo (line 258) | boolean isRobotCallbackWithClientInfo();
    method isRobotCallbackWithSenderInfo (line 259) | boolean isRobotCallbackWithSenderInfo();
    method isRobotCallbackWithTargetInfo (line 260) | boolean isRobotCallbackWithTargetInfo();
    method isRobotMentionExternalRobot (line 261) | boolean isRobotMentionExternalRobot();
    method getRobotGetUserInfoMask (line 262) | int getRobotGetUserInfoMask();
    method isChannelCallbackWithClientInfo (line 264) | boolean isChannelCallbackWithClientInfo();
    method isChannelCallbackWithSenderInfo (line 265) | boolean isChannelCallbackWithSenderInfo();
    method isChannelCallbackWithTargetInfo (line 266) | boolean isChannelCallbackWithTargetInfo();
    method isChannelNewCallbackFeature (line 267) | boolean isChannelNewCallbackFeature();
    method isGroupAllowPartSuccess (line 268) | boolean isGroupAllowPartSuccess();
    method isRobotAutoAcceptFriendRequest (line 269) | boolean isRobotAutoAcceptFriendRequest();
    method getPushExpiredTimes (line 271) | long getPushExpiredTimes();
    method getForcePushTypes (line 272) | Set<Integer> getForcePushTypes();
    method getClientForbiddenSendTypes (line 274) | List<Integer> getClientForbiddenSendTypes();
    method getBlackListExceptionTypes (line 275) | List<Integer> getBlackListExceptionTypes();
    method getGroupMuteExceptionTypes (line 276) | List<Integer> getGroupMuteExceptionTypes();
    method getGlobalMuteExceptionTypes (line 277) | List<Integer> getGlobalMuteExceptionTypes();
    method getMessageHead (line 279) | long getMessageHead(String user);
    method getFriendHead (line 280) | long getFriendHead(String user);
    method getFriendRqHead (line 281) | long getFriendRqHead(String user);
    method getSettingHead (line 282) | long getSettingHead(String user);
    method getShortUUID (line 285) | String getShortUUID();
    method checkSignature (line 287) | boolean checkSignature(String signature);
    method existSignatures (line 288) | boolean existSignatures();
    method initStore (line 292) | void initStore();
    method searchMatching (line 301) | Collection<StoredMessage> searchMatching(IMatchingCondition condition);
    method cleanRetained (line 303) | void cleanRetained(Topic topic);
    method storeRetained (line 305) | void storeRetained(Topic topic, StoredMessage storedMessage);

FILE: broker/src/main/java/io/moquette/spi/IMessaging.java
  type IMessaging (line 24) | public interface IMessaging {

FILE: broker/src/main/java/io/moquette/spi/ISessionsStore.java
  type ISessionsStore (line 30) | public interface ISessionsStore {
    method initStore (line 32) | void initStore();
    method contains (line 39) | boolean contains(String clientID);
    method updateOrCreateUserSession (line 41) | Session updateOrCreateUserSession(String username, String clientID, in...
    method loadActiveSession (line 43) | ErrorCode loadActiveSession(String username, String clientID);
    method updateExistSession (line 45) | ClientSession updateExistSession(String username, String clientID, WFC...
    method updateSessionIp (line 46) | void updateSessionIp(String username, String clientID, String ip);
    method getSession (line 47) | Session getSession(String clientID);
    method cleanDuplatedToken (line 49) | void cleanDuplatedToken(String cid, int pushType, String token, boolea...
    method updateSessionToken (line 51) | void updateSessionToken(Session session, boolean voip);
    method clearUserSession (line 53) | void clearUserSession(String username);
    method kickoffUserClient (line 55) | void kickoffUserClient(String userId, String clientId);
    method sessionForClientAndUser (line 62) | Session sessionForClientAndUser(String username, String clientID);
    method sessionForClient (line 64) | ClientSession sessionForClient(String clientID);
    method loadUserSession (line 66) | void loadUserSession(String username, String clientID);
    method sessionForUser (line 68) | Collection<Session> sessionForUser(String username);
    method getAllSessions (line 75) | Collection<ClientSession> getAllSessions();
    method isClientOnline (line 77) | boolean isClientOnline(String clientId);
    method inFlightAck (line 79) | StoredMessage inFlightAck(String clientID, int messageID);
    method inFlight (line 91) | void inFlight(String clientID, int messageID, StoredMessage msg);
    method nextPacketID (line 100) | int nextPacketID(String clientID);
    method queue (line 109) | Queue<StoredMessage> queue(String clientID);
    method dropQueue (line 111) | void dropQueue(String clientID);
    method moveInFlightToSecondPhaseAckWaiting (line 113) | void moveInFlightToSecondPhaseAckWaiting(String clientID, int messageI...
    method secondPhaseAcknowledged (line 122) | StoredMessage secondPhaseAcknowledged(String clientID, int messageID);
    method getInflightMessagesNo (line 130) | int getInflightMessagesNo(String clientID);
    method inboundInflight (line 135) | IMessagesStore.StoredMessage inboundInflight(String clientID, int mess...
    method markAsInboundInflight (line 137) | void markAsInboundInflight(String clientID, int messageID, StoredMessa...
    method getPendingPublishMessagesNo (line 145) | int getPendingPublishMessagesNo(String clientID);
    method getSecondPhaseAckPendingMessages (line 153) | int getSecondPhaseAckPendingMessages(String clientID);
    method disableSession (line 155) | void disableSession(String userId, String clientId);
    method cleanSession (line 156) | void cleanSession(String userId, String clientID);
    method isMultiEndpointSupported (line 158) | boolean isMultiEndpointSupported();
    method kickoffPCClient (line 160) | ErrorCode kickoffPCClient(String operator, String pcClientId);

FILE: broker/src/main/java/io/moquette/spi/IStore.java
  type IStore (line 19) | public interface IStore {
    method initStore (line 21) | void initStore();
    method close (line 23) | void close();
    method messagesStore (line 30) | IMessagesStore messagesStore();
    method sessionsStore (line 37) | ISessionsStore sessionsStore();

FILE: broker/src/main/java/io/moquette/spi/MessageGUID.java
  class MessageGUID (line 24) | public class MessageGUID implements Serializable {
    method MessageGUID (line 29) | public MessageGUID(String guid) {
    method equals (line 33) | @Override
    method hashCode (line 45) | @Override
    method toString (line 50) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/BrokerInterceptor.java
  class BrokerInterceptor (line 40) | final class BrokerInterceptor implements Interceptor {
    method BrokerInterceptor (line 46) | private BrokerInterceptor(int poolSize, List<InterceptHandler> handler...
    method BrokerInterceptor (line 63) | BrokerInterceptor(List<InterceptHandler> handlers) {
    method BrokerInterceptor (line 70) | BrokerInterceptor(IConfig props, List<InterceptHandler> handlers) {
    method stop (line 77) | void stop() {
    method notifyClientConnected (line 91) | @Override
    method notifyClientDisconnected (line 100) | @Override
    method notifyClientConnectionLost (line 109) | @Override
    method notifyMessageAcknowledged (line 118) | @Override
    method addInterceptHandler (line 127) | @Override
    method removeInterceptHandler (line 137) | @Override
    method getInterceptedMessageTypes (line 147) | private static Class<?>[] getInterceptedMessageTypes(InterceptHandler ...

FILE: broker/src/main/java/io/moquette/spi/impl/DebugUtils.java
  class DebugUtils (line 21) | final class DebugUtils {
    method payload2Str (line 23) | static String payload2Str(ByteBuf content) {
    method DebugUtils (line 27) | private DebugUtils() {

FILE: broker/src/main/java/io/moquette/spi/impl/DesUtil.java
  class DesUtil (line 12) | public class DesUtil {
    method main (line 16) | public static void main(String[] args) throws Exception {
    method encrypt (line 32) | public static String encrypt(String data) throws Exception {
    method decrypt (line 45) | public static String decrypt(String data) throws IOException,
    method encrypt (line 62) | private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
    method decrypt (line 90) | private static byte[] decrypt(byte[] data, byte[] key) throws Exception {

FILE: broker/src/main/java/io/moquette/spi/impl/InternalRepublisher.java
  class InternalRepublisher (line 29) | class InternalRepublisher {
    method InternalRepublisher (line 35) | InternalRepublisher(PersistentQueueMessageSender messageSender) {
    method publishRetained (line 39) | void publishRetained(ClientSession targetSession, Collection<IMessages...
    method publishStored (line 56) | void publishStored(ClientSession clientSession, Queue<IMessagesStore.S...
    method notRetainedPublish (line 72) | private MqttPublishMessage notRetainedPublish(IMessagesStore.StoredMes...
    method notRetainedPublish (line 77) | private MqttPublishMessage notRetainedPublish(IMessagesStore.StoredMes...
    method retainedPublish (line 82) | private MqttPublishMessage retainedPublish(IMessagesStore.StoredMessag...
    method retainedPublish (line 87) | private MqttPublishMessage retainedPublish(IMessagesStore.StoredMessag...
    method createPublishForQos (line 92) | public static MqttPublishMessage createPublishForQos(String topic, Mqt...

FILE: broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java
  class MessagesPublisher (line 54) | public class MessagesPublisher {
    method startChatroomScheduler (line 65) | public void startChatroomScheduler() {
    method stopChatroomScheduler (line 88) | public void stopChatroomScheduler() {
    method MessagesPublisher (line 99) | public MessagesPublisher(ConnectionDescriptorStore connectionDescripto...
    method notRetainedPublish (line 108) | static MqttPublishMessage notRetainedPublish(String topic, MqttQoS qos...
    method notRetainedPublishWithMessageId (line 112) | private static MqttPublishMessage notRetainedPublishWithMessageId(Stri...
    method publish2ChatroomReceivers (line 119) | private void publish2ChatroomReceivers(String user, String clientId, l...
    method publish2ChatroomReceiversDirectly (line 123) | public void publish2ChatroomReceiversDirectly(String user, String clie...
    method publish2Receivers (line 162) | private void publish2Receivers(String sender, int conversationType, St...
    method getExistBadgeNumber (line 428) | private int getExistBadgeNumber(String user) {
    method sendOfflineNotify (line 439) | public boolean sendOfflineNotify(String clientId) {
    method publishTransparentMessage2Receivers (line 458) | private void publishTransparentMessage2Receivers(long messageHead, Col...
    method getUserDisplayName (line 513) | String getUserDisplayName(String userId, String groupId, List<String> ...
    method getTargetName (line 531) | String getTargetName(String targetId, int cnvType, String fromUser, Li...
    method publishNotification (line 559) | public void publishNotification(String topic, String receiver, long he...
    method publishNotification (line 563) | public void publishNotification(String topic, String receiver, long he...
    method publishNotification (line 567) | public void publishNotification(String topic, String receiver, long he...
    method publishNotification (line 570) | public void publishNotification(String topic, String receiver, long he...
    method updateChatroomMembersQueue (line 610) | public void updateChatroomMembersQueue(String chatroomId, int line, lo...
    method publishRecall2ReceiversLocal (line 628) | public void publishRecall2ReceiversLocal(long messageUid, String opera...
    method publishRecall2Receivers (line 664) | public void publishRecall2Receivers(long messageUid, String operatorId...
    method publish2Receivers (line 668) | public void publish2Receivers(WFCMessage.Message message, Set<String> ...
    method getOutputMessageWithExtraInfo (line 747) | private OutputMessageData getOutputMessageWithExtraInfo(WFCMessage.Mes...
    method forwardMessage (line 808) | public void forwardMessage(final WFCMessage.Message message, String fo...
    method forwardMessageWithCallback (line 820) | public void forwardMessageWithCallback(final WFCMessage.Message messag...
    method notifyChannelListenStatusChanged (line 844) | public void notifyChannelListenStatusChanged(WFCMessage.ChannelInfo ch...

FILE: broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java
  class PersistentQueueMessageSender (line 31) | class PersistentQueueMessageSender {
    method PersistentQueueMessageSender (line 36) | PersistentQueueMessageSender(ConnectionDescriptorStore connectionDescr...
    method sendPush (line 40) | void sendPush(String sender, int conversationType, String target, int ...
    method sendPush (line 51) | void sendPush(String sender, String target, String deviceId, String pu...
    method sendPublish (line 58) | boolean sendPublish(ClientSession clientsession, MqttPublishMessage pu...
    method sendPublish (line 63) | boolean sendPublish(String clientId, MqttPublishMessage pubMessage) {

FILE: broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java
  class ProtocolProcessor (line 73) | public class ProtocolProcessor {
    method kickoffSession (line 76) | public void kickoffSession(final MemorySessionStore.Session session) {
    method kickoffUserOffline (line 105) | private void kickoffUserOffline(String userId) {
    method ProtocolProcessor (line 140) | ProtocolProcessor() {
    method init (line 156) | void init(ConnectionDescriptorStore connectionDescriptors,
    method processConnect (line 185) | public void processConnect(Channel channel, MqttConnectMessage msg) {
    method forwardOnlineStatusEvent (line 266) | public void forwardOnlineStatusEvent(String userId, String clientId, i...
    method connAck (line 299) | private MqttConnAckMessage connAck(MqttConnectReturnCode returnCode) {
    method connAck (line 303) | private MqttConnAckMessage connAck(MqttConnectReturnCode returnCode, b...
    method connAck (line 307) | private MqttConnAckMessage connAck(MqttConnectReturnCode returnCode, b...
    method connAckWithSessionPresent (line 312) | private MqttConnAckMessage connAckWithSessionPresent(MqttConnectReturn...
    method connAck (line 317) | private MqttConnAckMessage connAck(MqttConnectReturnCode returnCode, b...
    method login (line 323) | private boolean login(Channel channel, MqttConnectMessage msg, final S...
    method sendAck (line 403) | private boolean sendAck(ConnectionDescriptor descriptor, MqttConnectMe...
    method initializeKeepAliveTimeout (line 439) | private void initializeKeepAliveTimeout(Channel channel, MqttConnectMe...
    method createOrLoadClientSession (line 455) | private ClientSession createOrLoadClientSession(String username, Conne...
    method failedBlocked (line 474) | private void failedBlocked(Channel session) {
    method failedCredentials (line 479) | private void failedCredentials(Channel session) {
    method failedNoSession (line 484) | private void failedNoSession(Channel session) {
    method failedBadSignature (line 489) | private void failedBadSignature(Channel session) {
    method setIdleTime (line 494) | private void setIdleTime(ChannelPipeline pipeline, int idleTime) {
    method processPubAck (line 501) | public void processPubAck(Channel channel, MqttPubAckMessage msg) {
    method asStoredMessage (line 515) | public static IMessagesStore.StoredMessage asStoredMessage(MqttPublish...
    method processPublish (line 526) | public void processPublish(Channel channel, MqttPublishMessage msg) {
    method processPubRel (line 557) | public void processPubRel(Channel channel, MqttMessage msg) {
    method processPubRec (line 561) | public void processPubRec(Channel channel, MqttMessage msg) {
    method processPubComp (line 565) | public void processPubComp(Channel channel, MqttMessage msg) {
    method processDisconnect (line 569) | public void processDisconnect(Channel channel, boolean isDup, boolean ...
    method dropStoredMessages (line 638) | private boolean dropStoredMessages(ConnectionDescriptor descriptor, St...
    method notifyInterceptorDisconnected (line 651) | private boolean notifyInterceptorDisconnected(ConnectionDescriptor des...
    method processConnectionLost (line 664) | public void processConnectionLost(String clientID, Channel channel, bo...
    method processOffline (line 694) | public void processOffline(MemorySessionStore.Session session, boolean...
    method processUnsubscribe (line 714) | public void processUnsubscribe(Channel channel, MqttUnsubscribeMessage...
    method processSubscribe (line 718) | public void processSubscribe(Channel channel, MqttSubscribeMessage msg) {
    method doAckMessageFromValidateFilters (line 726) | private MqttSubAckMessage doAckMessageFromValidateFilters(List<MqttTop...
    method notifyChannelWritable (line 737) | public void notifyChannelWritable(Channel channel) {
    method getConnectionDescriptors (line 755) | public ConnectionDescriptorStore getConnectionDescriptors() {
    method addInterceptHandler (line 759) | public void addInterceptHandler(InterceptHandler interceptHandler) {
    method removeInterceptHandler (line 763) | public void removeInterceptHandler(InterceptHandler interceptHandler) {
    method getMessagesStore (line 767) | public IMessagesStore getMessagesStore() {
    method getSessionsStore (line 771) | public ISessionsStore getSessionsStore() {
    method onApiMessage (line 775) | public void onApiMessage(String fromUser, String clientId, byte[] mess...
    method shutdown (line 783) | public void shutdown() {

FILE: broker/src/main/java/io/moquette/spi/impl/ProtocolProcessorBootstrapper.java
  class ProtocolProcessorBootstrapper (line 42) | public class ProtocolProcessorBootstrapper {
    method ProtocolProcessorBootstrapper (line 54) | public ProtocolProcessorBootstrapper() {
    method init (line 76) | public ProtocolProcessor init(IConfig props, List<? extends InterceptH...
    method loadClass (line 123) | @SuppressWarnings("unchecked")
    method getSessionsStore (line 159) | public ISessionsStore getSessionsStore() {
    method shutdown (line 163) | public void shutdown() {
    method getConnectionDescriptors (line 172) | public ConnectionDescriptorStore getConnectionDescriptors() {

FILE: broker/src/main/java/io/moquette/spi/impl/Qos1PublishHandler.java
  class Qos1PublishHandler (line 67) | public class Qos1PublishHandler extends QosPublishHandler {
    method Qos1PublishHandler (line 78) | public Qos1PublishHandler(IAuthorizator authorizator, IMessagesStore m...
    method registerAllAction (line 91) | private void registerAllAction() {
    method onApiMessage (line 109) | public void onApiMessage(String fromUser, String clientId, byte[] mess...
    method checkUserOnlineHandler (line 124) | void checkUserOnlineHandler(byte[] payloadContent, RouteCallback callb...
    method imHandler (line 151) | void imHandler(String clientID, String fromUser, String topic, byte[] ...
    type IMCallback (line 225) | public interface IMCallback {
      method onIMHandled (line 226) | void onIMHandled(ErrorCode errorCode, ByteBuf ackPayload);
    type RouteCallback (line 229) | interface RouteCallback {
      method onRouteHandled (line 230) | void onRouteHandled(byte[] ackPayload);
    method receivedPublishQos1 (line 233) | void receivedPublishQos1(Channel channel, MqttPublishMessage msg) {
    method sendPubAck (line 261) | private void sendPubAck(String clientId, int messageID, ByteBuf payloa...

FILE: broker/src/main/java/io/moquette/spi/impl/QosPublishHandler.java
  class QosPublishHandler (line 26) | abstract class QosPublishHandler {
    method QosPublishHandler (line 32) | protected QosPublishHandler(IAuthorizator m_authorizator) {
    method checkWriteOnTopic (line 36) | public boolean checkWriteOnTopic(Topic topic, Channel channel) {

FILE: broker/src/main/java/io/moquette/spi/impl/Utils.java
  class Utils (line 27) | public final class Utils {
    method defaultGet (line 29) | public static <T, K> T defaultGet(Map<K, T> map, K key, T defaultValue) {
    method messageId (line 37) | public static int messageId(MqttMessage msg) {
    method readBytesAndRewind (line 41) | public static byte[] readBytesAndRewind(ByteBuf payload) {
    method Utils (line 49) | private Utils() {

FILE: broker/src/main/java/io/moquette/spi/impl/security/ACLFileParser.java
  class ACLFileParser (line 28) | public final class ACLFileParser {
    method parse (line 41) | public static AuthorizationsCollector parse(File file) throws ParseExc...
    method parse (line 75) | public static AuthorizationsCollector parse(Reader reader) throws Pars...
    method ACLFileParser (line 112) | private ACLFileParser() {

FILE: broker/src/main/java/io/moquette/spi/impl/security/AES.java
  class AES (line 15) | public class AES {
    method AESEncrypt (line 20) | public static byte[] AESEncrypt(String sSrc, String userKey) {
    method useAes256 (line 24) | public static void useAes256(boolean aes256) {
    method AESEncrypt (line 31) | public static byte[] AESEncrypt(byte[] tobeencrypdata, byte[] aesKey) {
    method AESEncrypt (line 94) | public static byte[] AESEncrypt(byte[] tobeencrypdata, String userKey) {
    method getUnsignedByte (line 102) | public static int getUnsignedByte (byte data){      //将data字节型数据转换为0~2...
    method convertUserKey (line 106) | private static byte[] convertUserKey(String userKey) {
    method AESDecrypt (line 114) | public static byte[] AESDecrypt(byte[] sSrc, String userKey, boolean c...
    method AESDecrypt (line 118) | public static byte[] AESDecrypt(byte[] sSrc, String userKey, boolean c...
    method AESDecrypt (line 126) | public static byte[] AESDecrypt(byte[] sSrc, byte[] aesKey, boolean ch...

FILE: broker/src/main/java/io/moquette/spi/impl/security/AcceptAllAuthenticator.java
  class AcceptAllAuthenticator (line 21) | public class AcceptAllAuthenticator implements IAuthenticator {
    method checkValid (line 23) | public boolean checkValid(String clientId, String username, byte[] pas...

FILE: broker/src/main/java/io/moquette/spi/impl/security/Authorization.java
  class Authorization (line 25) | public class Authorization {
    type Permission (line 33) | enum Permission {
    method Authorization (line 37) | Authorization(Topic topic) {
    method Authorization (line 41) | Authorization(Topic topic, Permission permission) {
    method grant (line 46) | public boolean grant(Permission desiredPermission) {
    method equals (line 50) | @Override
    method hashCode (line 67) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/security/AuthorizationsCollector.java
  class AuthorizationsCollector (line 30) | class AuthorizationsCollector implements IAuthorizator {
    method emptyImmutableCollector (line 39) | static final AuthorizationsCollector emptyImmutableCollector() {
    method parse (line 47) | void parse(String line) throws ParseException {
    method parseAuthLine (line 68) | protected Authorization parseAuthLine(String line) throws ParseExcepti...
    method createAuthorization (line 89) | private Authorization createAuthorization(String line, String[] tokens...
    method canWrite (line 106) | @Override
    method canRead (line 111) | @Override
    method canDoOperation (line 116) | private boolean canDoOperation(Topic topic, Authorization.Permission p...
    method matchACL (line 143) | private boolean matchACL(List<Authorization> auths, Topic topic, Autho...
    method isNotEmpty (line 154) | private boolean isNotEmpty(String client) {
    method isEmpty (line 158) | public boolean isEmpty() {

FILE: broker/src/main/java/io/moquette/spi/impl/security/DBAuthenticator.java
  class DBAuthenticator (line 34) | public class DBAuthenticator implements IAuthenticator {
    method DBAuthenticator (line 41) | public DBAuthenticator(IConfig conf) {
    method DBAuthenticator (line 61) | public DBAuthenticator(String driver, String jdbcUrl, String sqlQuery,...
    method checkValid (line 80) | @Override
    method finalize (line 106) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/security/DenyAllAuthorizator.java
  class DenyAllAuthorizator (line 22) | public class DenyAllAuthorizator implements IAuthorizator {
    method canWrite (line 24) | @Override
    method canRead (line 29) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/security/FileAuthenticator.java
  class FileAuthenticator (line 36) | public class FileAuthenticator extends ResourceAuthenticator {
    method FileAuthenticator (line 38) | public FileAuthenticator(String parent, String filePath) {

FILE: broker/src/main/java/io/moquette/spi/impl/security/ITokenGenerator.java
  type ITokenGenerator (line 3) | public interface ITokenGenerator {
    method generateToken (line 4) | public String generateToken(String username);

FILE: broker/src/main/java/io/moquette/spi/impl/security/PermitAllAuthorizator.java
  class PermitAllAuthorizator (line 22) | public class PermitAllAuthorizator implements IAuthorizator {
    method canWrite (line 24) | @Override
    method canRead (line 29) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/security/ResourceAuthenticator.java
  class ResourceAuthenticator (line 46) | public class ResourceAuthenticator implements IAuthenticator {
    method ResourceAuthenticator (line 52) | public ResourceAuthenticator(IResourceLoader resourceLoader, String re...
    method parse (line 78) | private void parse(Reader reader) throws ParseException {
    method checkValid (line 115) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/security/TokenAuthenticator.java
  class TokenAuthenticator (line 8) | public class TokenAuthenticator implements IAuthenticator, ITokenGenerat...
    method main (line 9) | public static void main(String[] args) throws IOException {
    method checkValid (line 20) | @Override
    method generateToken (line 29) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/subscriptions/Token.java
  class Token (line 22) | public class Token {
    method Token (line 29) | protected Token(String s) {
    method name (line 33) | protected String name() {
    method match (line 37) | protected boolean match(Token t) {
    method hashCode (line 49) | @Override
    method equals (line 56) | @Override
    method toString (line 71) | @Override

FILE: broker/src/main/java/io/moquette/spi/impl/subscriptions/Topic.java
  class Topic (line 27) | public class Topic implements Serializable {
    method Topic (line 39) | public Topic(String topic) {
    method getTopic (line 44) | public String getTopic() {
    method getTokens (line 49) | public List<Token> getTokens() {
    method parseTopic (line 63) | private List<Token> parseTopic(String topic) throws ParseException {
    method isValid (line 109) | public boolean isValid() {
    method match (line 124) | public boolean match(Topic subscriptionTopic) {
    method toString (line 154) | @Override
    method equals (line 159) | @Override
    method hashCode (line 172) | @Override
    method asTopic (line 180) | public static Topic asTopic(String s) {

FILE: broker/src/main/java/io/moquette/spi/security/DES.java
  class DES (line 14) | public class DES {
    method decryptDES (line 19) | public static String decryptDES(String decryptString) throws Exception {
    method init (line 29) | public static void init(byte[] secret) {
    method encryptDES (line 39) | public static String encryptDES(String encryptString) throws Exception {
    method encrypt (line 48) | public static byte[] encrypt(byte[] datasource) throws InvalidKeyExcep...
    method decrypt (line 72) | public static byte[] decrypt(byte[] src) throws Exception {
    method AESEncrypt (line 88) | public static byte[] AESEncrypt(String sSrc, String userKey) {
    method AESEncrypt (line 92) | public static byte[] AESEncrypt(byte[] tobeencrypdata, byte[] aesKey) {
    method AESEncrypt (line 146) | public static byte[] AESEncrypt(byte[] tobeencrypdata, String userKey) {
    method getUnsignedByte (line 154) | public static int getUnsignedByte (byte data){      //将data字节型数据转换为0~2...
    method convertUserKey (line 158) | private static byte[] convertUserKey(String userKey) {
    method AESDecrypt (line 166) | public static byte[] AESDecrypt(byte[] sSrc, String userKey, boolean c...

FILE: broker/src/main/java/io/moquette/spi/security/IAuthenticator.java
  type IAuthenticator (line 22) | public interface IAuthenticator {
    method checkValid (line 24) | boolean checkValid(String clientId, String username, byte[] password);

FILE: broker/src/main/java/io/moquette/spi/security/IAuthorizator.java
  type IAuthorizator (line 27) | public interface IAuthorizator {
    method canWrite (line 40) | boolean canWrite(Topic topic, String user, String client);
    method canRead (line 42) | boolean canRead(Topic topic, String user, String client);

FILE: broker/src/main/java/io/moquette/spi/security/ISslContextCreator.java
  type ISslContextCreator (line 24) | public interface ISslContextCreator {
    method initSSLContext (line 26) | SSLContext initSSLContext();

FILE: broker/src/main/java/io/moquette/spi/security/Tokenor.java
  class Tokenor (line 7) | public class Tokenor {
    method setKey (line 11) | public static void setKey(String key) {
    method setExpiredTime (line 17) | public static void setExpiredTime(long expiredTime) {
    method getUserId (line 21) | public static String getUserId(byte[] password) {
    method getToken (line 41) | public static String getToken(String username) {

FILE: broker/src/main/java/io/netty/handler/codec/mqtt/MqttCodecUtil.java
  class MqttCodecUtil (line 24) | final class MqttCodecUtil {
    method getMqttVersion (line 30) | static MqttVersion 
Condensed preview — 775 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,417K chars).
[
  {
    "path": ".editorconfig",
    "chars": 299,
    "preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with"
  },
  {
    "path": ".gitattributes",
    "chars": 57,
    "preview": "*.cpp linguist-language=java\n*.cc linguist-language=java\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 527,
    "preview": "## 提issue小提示\n为了尽快定位问题,需要提供足够的信息,请按照我们的要求格式来提问。***如果您不按照格式提问,我们将无法回复您的问题***\n\n#### 操作说明\n详细说明操作那个界面,每一步骤都要说得详细,如果是SDK或者api使"
  },
  {
    "path": ".gitignore",
    "chars": 986,
    "preview": "/build\n*/build/\n/target/\n/parser/target/\n/benchmarking/target/\n.idea/\n*.iml\nbroker/target/\nclient/target/\nparser_commons"
  },
  {
    "path": ".travis.yml",
    "chars": 276,
    "preview": "language: java\njdk:\n  - oraclejdk8\nbefore_cache:\n  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock\n  - rm -fr $HO"
  },
  {
    "path": "LICENSE",
    "chars": 16757,
    "preview": "Creative Commons Attribution-NoDerivs 3.0 Unported\n\nCREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE "
  },
  {
    "path": "LICENSE_996",
    "chars": 2585,
    "preview": "Copyright (c) <2019> <wildfirechat>\n\nAnti 996 License Version 1.0 (Draft)\n\nPermission is hereby granted to any individua"
  },
  {
    "path": "LICENSE_mqtt-jmeter",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 12405,
    "preview": "# 野火IM解决方案\n野火IM是专业级的即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。\n\n## 功能特性\n* 极致地硬件利用率,IM服务最低128M内存即可运行,上不封顶。\n* 协议先进,采用MQTT+Prot"
  },
  {
    "path": "broker/config/hazelcast.xml",
    "chars": 5168,
    "preview": "\n<!--    # 本配置文件为debug使用,修改这里不会在Release包中生效。Release中包含的配置文件在 ${Porject_Path}/distribution/src/main/resources目录下-->\n\n\n<ha"
  },
  {
    "path": "broker/config/wildfirechat.conf",
    "chars": 18299,
    "preview": "#\n#\n# 本配置文件为debug使用,修改这里不会在Release包中生效。Release中包含的配置文件在 ${Porject_Path}/distribution/src/main/resources目录下\n#\n#\n\n\n\n#*****"
  },
  {
    "path": "broker/migrate/h2/V10__create_default_admin.sql",
    "chars": 106,
    "preview": "\ninsert into t_user (`_uid`,`_name`,`_display_name`,`_type`,`_dt`) values ('admin','admin','系统管理员',3,1);\n\n"
  },
  {
    "path": "broker/migrate/h2/V11__alter_device_token.sql",
    "chars": 68,
    "preview": "ALTER TABLE t_user_session MODIFY _token VARCHAR(240) DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V12__add_group_control_columns.sql",
    "chars": 295,
    "preview": "alter table `t_group` add column `_mute` tinyint NOT NULL DEFAULT 0;\nalter table `t_group` add column `_join_type` tinyi"
  },
  {
    "path": "broker/migrate/h2/V13__create_settings_table.sql",
    "chars": 245,
    "preview": "\nDROP TABLE IF EXISTS `t_settings`;\nCREATE TABLE `t_settings` (\n  `id` int(11) NOT NULL PRIMARY KEY,\n  `value` varchar(6"
  },
  {
    "path": "broker/migrate/h2/V14__add_id_for_sensitive_word.sql",
    "chars": 91,
    "preview": "alter table `t_sensitiveword` add column `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT;\n"
  },
  {
    "path": "broker/migrate/h2/V15__alter_voip_token_length.sql",
    "chars": 84,
    "preview": "alter table `t_user_session` modify column `_voip_token` varchar(240) DEFAULT '';\n\n\n"
  },
  {
    "path": "broker/migrate/h2/V16__add_friend_blocked.sql",
    "chars": 117,
    "preview": "alter table t_friend add column `_blacked` tinyint DEFAULT 0;\nupdate t_friend set `_blacked` = 1 where `_state` = 2;\n"
  },
  {
    "path": "broker/migrate/h2/V17__add_user_session_token_index.sql",
    "chars": 75,
    "preview": "alter table `t_user_session` ADD INDEX `session_token_index` ( `_token` );\n"
  },
  {
    "path": "broker/migrate/h2/V18__add_friend_request_index.sql",
    "chars": 83,
    "preview": "alter table t_friend_request add index `friend_request_uid_index` (`_friend_uid`);\n"
  },
  {
    "path": "broker/migrate/h2/V19__add_user_session_uid_index.sql",
    "chars": 71,
    "preview": "alter table `t_user_session` ADD INDEX `session_uid_index` ( `_uid` );\n"
  },
  {
    "path": "broker/migrate/h2/V1__baseline.sql",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "broker/migrate/h2/V20__user_session_add_deleted.sql",
    "chars": 70,
    "preview": "alter table `t_user_session` add column `_deleted` tinyint DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V21__user_add_deleted.sql",
    "chars": 62,
    "preview": "alter table `t_user` add column `_deleted` tinyint DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V22__refactor_channel_status.sql",
    "chars": 57,
    "preview": "update t_channel set `_status` = 64 where `_status` = 3;\n"
  },
  {
    "path": "broker/migrate/h2/V23__alter_message_add_to_column.sql",
    "chars": 67,
    "preview": "alter table t_messages add column `_to` varchar(64) DEFAULT NULL;\n\n"
  },
  {
    "path": "broker/migrate/h2/V24__add_friend_extra.sql",
    "chars": 60,
    "preview": "alter table t_friend add column `_extra` TEXT DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V25__create_chatroom_blacklist_manager.sql",
    "chars": 669,
    "preview": "\nDROP TABLE IF EXISTS `t_chatroom_blacklist`;\nCREATE TABLE `t_chatroom_blacklist` (\n  `id` int(11) NOT NULL PRIMARY KEY "
  },
  {
    "path": "broker/migrate/h2/V26__add_user_messages_line.sql",
    "chars": 190,
    "preview": "alter table `t_user_messages` add column `_line` int(11) NOT NULL DEFAULT 0;\nalter table `t_user_messages` ADD INDEX `me"
  },
  {
    "path": "broker/migrate/h2/V27__create_device_table.sql",
    "chars": 630,
    "preview": "\nDROP TABLE IF EXISTS `t_thing`;\n\nDROP TABLE IF EXISTS `t_device`;\nCREATE TABLE `t_device` (\n  `id` int(11) NOT NULL PRI"
  },
  {
    "path": "broker/migrate/h2/V28__add_session_user_type.sql",
    "chars": 70,
    "preview": "alter table t_user_session add column `_user_type` tinyint DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V29__create_receipt_table.sql",
    "chars": 1376,
    "preview": "\nDROP TABLE IF EXISTS `t_read_report`;\nCREATE TABLE `t_read_report` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT"
  },
  {
    "path": "broker/migrate/h2/V2__create_table.sql",
    "chars": 6238,
    "preview": "\n\nDROP TABLE IF EXISTS `t_group`;\nCREATE TABLE `t_group` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,\n  `_gid` "
  },
  {
    "path": "broker/migrate/h2/V30__add_group_member_create_dt.sql",
    "chars": 74,
    "preview": "alter table t_group_member add column `_create_dt`  bigint(20) DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V31__add_group_member_count_history_message.sql",
    "chars": 164,
    "preview": "alter table `t_group` add column `_history_message` tinyint NOT NULL DEFAULT 0;\nalter table `t_group` add column `_max_m"
  },
  {
    "path": "broker/migrate/h2/V32__alter_setting_column_name.sql",
    "chars": 154,
    "preview": "alter table `t_settings` change column `value` `_value` varchar(64) NOT NULL;\nalter table `t_settings` change column `de"
  },
  {
    "path": "broker/migrate/h2/V33__alter_group_searchable_column.sql",
    "chars": 78,
    "preview": "alter table `t_group` modify column `_searchable` int(11) NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V34__create_files_table.sql",
    "chars": 536,
    "preview": "DROP TABLE IF EXISTS `t_file`;\nCREATE TABLE `t_file` (\n  `_mid` bigint(20) NOT NULL PRIMARY KEY,\n  `_from` varchar(64) N"
  },
  {
    "path": "broker/migrate/h2/V35__create_file_transfer_user.sql",
    "chars": 337,
    "preview": "\ninsert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('wfc_file_transfer','wfc_file_tra"
  },
  {
    "path": "broker/migrate/h2/V36__alter_channel_status_column.sql",
    "chars": 76,
    "preview": "alter table `t_channel` modify column `_status` int(11) NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/h2/V37__add_user_messages_mid_index.sql",
    "chars": 77,
    "preview": "alter table `t_user_messages` ADD INDEX `user_messages_mid_index` ( `_mid`);\n"
  },
  {
    "path": "broker/migrate/h2/V38__add_user_messages_conv_info.sql",
    "chars": 374,
    "preview": "alter table `t_user_messages` add column `_type` tinyint(4) NOT NULL DEFAULT '0';\nalter table `t_user_messages` add colu"
  },
  {
    "path": "broker/migrate/h2/V39__add_group_member_friend_request_extra.sql",
    "chars": 138,
    "preview": "alter table `t_group_member` add column `_extra` TEXT DEFAULT NULL;\nalter table `t_friend_request` add column `_extra` T"
  },
  {
    "path": "broker/migrate/h2/V3__create_sharding_table.sql",
    "chars": 783,
    "preview": "\nDROP TABLE IF EXISTS `t_messages`;\nCREATE TABLE `t_messages` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,\n  `_"
  },
  {
    "path": "broker/migrate/h2/V40__add_user_messages_cont_type.sql",
    "chars": 84,
    "preview": "alter table `t_user_messages` add column `_cont_type` int(11) NOT NULL DEFAULT '0';\n"
  },
  {
    "path": "broker/migrate/h2/V41__alter_user_setting_key_column.sql",
    "chars": 73,
    "preview": "alter table `t_user_setting` modify column `_key` varchar(128) NOT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V42__create_secret_chat_table.sql",
    "chars": 417,
    "preview": "\nDROP TABLE IF EXISTS `t_secret_chat`;\nCREATE TABLE `t_secret_chat` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT"
  },
  {
    "path": "broker/migrate/h2/V43__add_message_table_conversation_index.sql",
    "chars": 89,
    "preview": "alter table `t_messages` add INDEX `messages_conv_index` ( `_type`, `_target`, `_line`);\n"
  },
  {
    "path": "broker/migrate/h2/V44__add_channel_listener_table_member_index.sql",
    "chars": 74,
    "preview": "alter table `t_channel_listener` add INDEX `channel_mid_index` ( `_mid`);\n"
  },
  {
    "path": "broker/migrate/h2/V45__add_channel_menu_column.sql",
    "chars": 62,
    "preview": "alter table `t_channel` add column `_menu` BLOB DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V46__add_group_member_mid_index.sql",
    "chars": 74,
    "preview": "alter table `t_group_member` add INDEX `group_member_mid_index` (`_mid`);\n"
  },
  {
    "path": "broker/migrate/h2/V47__create_super_group.sql",
    "chars": 706,
    "preview": "alter table `t_group` add column `_super_group` tinyint NOT NULL DEFAULT 0;\n\nDROP TABLE IF EXISTS `t_group_messages`;\nCR"
  },
  {
    "path": "broker/migrate/h2/V48__group_add_deleted_column.sql",
    "chars": 73,
    "preview": "alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0;\n\n"
  },
  {
    "path": "broker/migrate/h2/V49__add_domain_table.sql",
    "chars": 412,
    "preview": "DROP TABLE IF EXISTS `t_domain`;\nCREATE TABLE `t_domain` (\n  `_domain_id` varchar(64) NOT NULL PRIMARY KEY,\n  `_name` va"
  },
  {
    "path": "broker/migrate/h2/V4__create_default_chatroom.sql",
    "chars": 339,
    "preview": "\ninsert into t_chatroom (`_cid`, `_title`, `_desc`,`_dt`) values ('chatroom1','火信聊天室1','火信测试聊天室1,用来演示聊天室功能', 1);\n\ninsert"
  },
  {
    "path": "broker/migrate/h2/V50__update_group_member_index.sql",
    "chars": 70,
    "preview": "CREATE INDEX `user_gid_dt_index` ON `t_group_member` (`_gid`, `_dt`);\n"
  },
  {
    "path": "broker/migrate/h2/V51__add_not_allow_name_setting.sql",
    "chars": 116,
    "preview": "insert into t_settings(`id`, `_value`,`_desc`) values (2, '文件传输助手,客服,官方', '禁止使用名称,如果有多个,以英文逗号隔开。直接修改数据库,不用重启IM服务');\n"
  },
  {
    "path": "broker/migrate/h2/V52__modify_message_target.sql",
    "chars": 72,
    "preview": "alter table `t_messages` modify column `_target` varchar(129) NOT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V53__session_add_ip_column.sql",
    "chars": 70,
    "preview": "ALTER TABLE `t_user_session` ADD COLUMN `_ip` varchar(40) DEFAULT '';\n"
  },
  {
    "path": "broker/migrate/h2/V54__add_group_member_index.sql",
    "chars": 74,
    "preview": "CREATE INDEX `user_gid_type_index` ON `t_group_member` (`_gid`, `_type`);\n"
  },
  {
    "path": "broker/migrate/h2/V55__create_conference_table.sql",
    "chars": 384,
    "preview": "\nDROP TABLE IF EXISTS `t_conference`;\nCREATE TABLE `t_conference` (\n  `_id` varchar(64) NOT NULL PRIMARY KEY,\n  `_des` v"
  },
  {
    "path": "broker/migrate/h2/V56__create_join_group_request_table.sql",
    "chars": 718,
    "preview": "DROP TABLE IF EXISTS `t_join_group_request`;\nCREATE TABLE `t_join_group_request` (\n  `id` int(11) NOT NULL PRIMARY KEY A"
  },
  {
    "path": "broker/migrate/h2/V57__create_friend_index.sql",
    "chars": 67,
    "preview": "alter table t_friend add index `friend_uid_index` (`_friend_uid`);\n"
  },
  {
    "path": "broker/migrate/h2/V5__create_default_robot.sql",
    "chars": 328,
    "preview": "\ninsert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('FireRobot','FireRobot','小火','htt"
  },
  {
    "path": "broker/migrate/h2/V6__add_friend_alias.sql",
    "chars": 68,
    "preview": "\nalter table t_friend add column `_alias` varchar(64) DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/h2/V7__add_createtime_user_group_table.sql",
    "chars": 163,
    "preview": "alter table t_user add column `_createTime` TIMESTAMP default CURRENT_TIMESTAMP;\nalter table t_group add column `_create"
  },
  {
    "path": "broker/migrate/h2/V8__add_content_type_in_messages.sql",
    "chars": 82,
    "preview": "alter table `t_messages` add column `_content_type` int(11) NOT NULL DEFAULT '0';\n"
  },
  {
    "path": "broker/migrate/h2/V9__add_sensitive_messages.sql",
    "chars": 520,
    "preview": "\nDROP TABLE IF EXISTS `t_sensitive_messages`;\nCREATE TABLE `t_sensitive_messages` (\n  `id` int(11) NOT NULL PRIMARY KEY "
  },
  {
    "path": "broker/migrate/mysql/V10__create_default_admin.sql",
    "chars": 106,
    "preview": "\ninsert into t_user (`_uid`,`_name`,`_display_name`,`_type`,`_dt`) values ('admin','admin','系统管理员',3,1);\n\n"
  },
  {
    "path": "broker/migrate/mysql/V11__alter_device_token.sql",
    "chars": 68,
    "preview": "ALTER TABLE t_user_session MODIFY _token VARCHAR(240) DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/mysql/V12__add_group_control_columns.sql",
    "chars": 295,
    "preview": "alter table `t_group` add column `_mute` tinyint NOT NULL DEFAULT 0;\nalter table `t_group` add column `_join_type` tinyi"
  },
  {
    "path": "broker/migrate/mysql/V13__create_session_table.sql",
    "chars": 409,
    "preview": "\nDROP TABLE IF EXISTS `t_session`;\nCREATE TABLE `t_session` (\n  `row_id` varchar(50) not null primary key,\n  `del_flag` "
  },
  {
    "path": "broker/migrate/mysql/V14__alter_createtime_user_group_table.sql",
    "chars": 161,
    "preview": "alter table t_user MODIFY column `_createTime` DATETIME NOT NULL DEFAULT NOW();\nalter table t_group MODIFY column `_crea"
  },
  {
    "path": "broker/migrate/mysql/V15__alter_session_table_time.sql",
    "chars": 250,
    "preview": "alter table t_session MODIFY column `create_time` DATETIME NOT NULL DEFAULT NOW();\nalter table t_session MODIFY column `"
  },
  {
    "path": "broker/migrate/mysql/V16__update_message_dt_gmt8.sql",
    "chars": 2262,
    "preview": "update t_messages_0 set _dt = date_add(_dt, interval 8 hour);\nupdate t_messages_1 set _dt = date_add(_dt, interval 8 hou"
  },
  {
    "path": "broker/migrate/mysql/V17__add_default_sensitive_word.sql",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "broker/migrate/mysql/V18__create_settings_table.sql",
    "chars": 333,
    "preview": "\nDROP TABLE IF EXISTS `t_settings`;\nCREATE TABLE `t_settings` (\n  `id` int(11) NOT NULL PRIMARY KEY,\n  `value` varchar(6"
  },
  {
    "path": "broker/migrate/mysql/V19__add_id_for_sensitive_word.sql",
    "chars": 91,
    "preview": "alter table `t_sensitiveword` add column `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT;\n"
  },
  {
    "path": "broker/migrate/mysql/V1__baseline.sql",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "broker/migrate/mysql/V20__alter_voip_token_length.sql",
    "chars": 84,
    "preview": "alter table `t_user_session` modify column `_voip_token` varchar(240) DEFAULT '';\n\n\n"
  },
  {
    "path": "broker/migrate/mysql/V21__add_friend_blocked.sql",
    "chars": 149,
    "preview": "alter table t_friend add column `_blacked` tinyint DEFAULT 0 COMMENT \"0, normal; 1, blacked\";\nupdate t_friend set `_blac"
  },
  {
    "path": "broker/migrate/mysql/V22__add_user_session_token_index.sql",
    "chars": 75,
    "preview": "alter table `t_user_session` ADD INDEX `session_token_index` ( `_token` );\n"
  },
  {
    "path": "broker/migrate/mysql/V23__add_friend_request_index.sql",
    "chars": 83,
    "preview": "alter table t_friend_request add index `friend_request_uid_index` (`_friend_uid`);\n"
  },
  {
    "path": "broker/migrate/mysql/V24__add_user_session_uid_index.sql",
    "chars": 71,
    "preview": "alter table `t_user_session` ADD INDEX `session_uid_index` ( `_uid` );\n"
  },
  {
    "path": "broker/migrate/mysql/V25__user_session_add_deleted.sql",
    "chars": 70,
    "preview": "alter table `t_user_session` add column `_deleted` tinyint DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/mysql/V26__user_add_deleted.sql",
    "chars": 62,
    "preview": "alter table `t_user` add column `_deleted` tinyint DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/mysql/V27__refactor_channel_status.sql",
    "chars": 57,
    "preview": "update t_channel set `_status` = 64 where `_status` = 3;\n"
  },
  {
    "path": "broker/migrate/mysql/V28__alter_message_add_to_column.sql",
    "chars": 2541,
    "preview": "alter table t_messages add column `_to` varchar(64) DEFAULT NULL;\n\nalter table t_messages_0 add column `_to` varchar(64)"
  },
  {
    "path": "broker/migrate/mysql/V29__add_friend_extra.sql",
    "chars": 60,
    "preview": "alter table t_friend add column `_extra` TEXT DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/mysql/V2__create_table.sql",
    "chars": 8362,
    "preview": "\nDROP TABLE IF EXISTS `t_messages`;\nCREATE TABLE `t_messages` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,\n  `_"
  },
  {
    "path": "broker/migrate/mysql/V30__create_chatroom_blacklist_manager.sql",
    "chars": 825,
    "preview": "\nDROP TABLE IF EXISTS `t_chatroom_blacklist`;\nCREATE TABLE `t_chatroom_blacklist` (\n  `id` int(11) NOT NULL PRIMARY KEY "
  },
  {
    "path": "broker/migrate/mysql/V31__add_user_messages_line.sql",
    "chars": 25316,
    "preview": "alter table `t_user_messages` add column `_line` int(11) NOT NULL DEFAULT 0;\nalter table `t_user_messages_0` add column "
  },
  {
    "path": "broker/migrate/mysql/V32__create_device_table.sql",
    "chars": 803,
    "preview": "\nDROP TABLE IF EXISTS `t_thing`;\n\nDROP TABLE IF EXISTS `t_device`;\nCREATE TABLE `t_device` (\n  `id` int(11) NOT NULL PRI"
  },
  {
    "path": "broker/migrate/mysql/V33__add_session_user_type.sql",
    "chars": 117,
    "preview": "alter table t_user_session add column `_user_type` tinyint DEFAULT 0 COMMENT \"0, normal user; 1, robot; 2, device;\";\n"
  },
  {
    "path": "broker/migrate/mysql/V34__create_receipt_table.sql",
    "chars": 1684,
    "preview": "\nDROP TABLE IF EXISTS `t_read_report`;\nCREATE TABLE `t_read_report` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT"
  },
  {
    "path": "broker/migrate/mysql/V35__add_group_member_create_dt.sql",
    "chars": 110,
    "preview": "alter table t_group_member add column `_create_dt`  bigint(20) DEFAULT 0, COMMENT \"group member create time\";\n"
  },
  {
    "path": "broker/migrate/mysql/V36__add_group_member_count_history_message.sql",
    "chars": 258,
    "preview": "alter table `t_group` add column `_history_message` tinyint NOT NULL DEFAULT 0, COMMENT \"new group member can load group"
  },
  {
    "path": "broker/migrate/mysql/V37__alter_setting_column_name.sql",
    "chars": 154,
    "preview": "alter table `t_settings` change column `value` `_value` varchar(64) NOT NULL;\nalter table `t_settings` change column `de"
  },
  {
    "path": "broker/migrate/mysql/V38__alter_group_searchable_column.sql",
    "chars": 78,
    "preview": "alter table `t_group` modify column `_searchable` int(11) NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/mysql/V39__create_files_table.sql",
    "chars": 613,
    "preview": "DROP TABLE IF EXISTS `t_file`;\nCREATE TABLE `t_file` (\n  `_mid` bigint(20) NOT NULL PRIMARY KEY,\n  `_from` varchar(64) N"
  },
  {
    "path": "broker/migrate/mysql/V3__create_sharding_table.sql",
    "chars": 72509,
    "preview": "\nDROP TABLE IF EXISTS `t_messages_0`;\nCREATE TABLE `t_messages_0` (\n    `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT"
  },
  {
    "path": "broker/migrate/mysql/V40__create_file_transfer_user.sql",
    "chars": 337,
    "preview": "\ninsert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('wfc_file_transfer','wfc_file_tra"
  },
  {
    "path": "broker/migrate/mysql/V41__alter_channel_status_column.sql",
    "chars": 76,
    "preview": "alter table `t_channel` modify column `_status` int(11) NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/mysql/V42__add_user_messages_mid_index.sql",
    "chars": 10738,
    "preview": "alter table `t_user_messages` add INDEX `user_messages_mid_index` ( `_mid` );\nalter table `t_user_messages_0` add INDEX "
  },
  {
    "path": "broker/migrate/mysql/V43__add_user_messages_conv_info.sql",
    "chars": 53465,
    "preview": "alter table `t_user_messages` add column `_type` tinyint(4) NOT NULL DEFAULT '0';\nalter table `t_user_messages` add colu"
  },
  {
    "path": "broker/migrate/mysql/V44__add_group_member_friend_request_extra.sql",
    "chars": 138,
    "preview": "alter table `t_group_member` add column `_extra` TEXT DEFAULT NULL;\nalter table `t_friend_request` add column `_extra` T"
  },
  {
    "path": "broker/migrate/mysql/V45__add_user_messages_cont_type.sql",
    "chars": 11366,
    "preview": "alter table `t_user_messages` add column `_cont_type` int(11) NOT NULL DEFAULT '0';\n\nalter table `t_user_messages_0` add"
  },
  {
    "path": "broker/migrate/mysql/V46__utf8mb4_unicode_ci_to_utf8mb4_bin.sql",
    "chars": 48626,
    "preview": "ALTER TABLE `t_channel` MODIFY COLUMN `_cid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;\nALTER TABLE"
  },
  {
    "path": "broker/migrate/mysql/V47__fix_read_report_error.sql",
    "chars": 238,
    "preview": "\nALTER TABLE `t_read_report` MODIFY COLUMN `_uid` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL;\nAL"
  },
  {
    "path": "broker/migrate/mysql/V48__alter_user_setting_key_column.sql",
    "chars": 115,
    "preview": "alter table `t_user_setting` modify column `_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL;\n"
  },
  {
    "path": "broker/migrate/mysql/V49__create_secret_chat_table.sql",
    "chars": 487,
    "preview": "\nDROP TABLE IF EXISTS `t_secret_chat`;\nCREATE TABLE `t_secret_chat` (\n  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT"
  },
  {
    "path": "broker/migrate/mysql/V4__create_default_chatroom.sql",
    "chars": 338,
    "preview": "insert into t_chatroom (`_cid`, `_title`, `_desc`,`_dt`) values ('chatroom1','火信聊天室1','火信测试聊天室1,用来演示聊天室功能', 1);\n\ninsert "
  },
  {
    "path": "broker/migrate/mysql/V50__add_message_table_conversation_index.sql",
    "chars": 3416,
    "preview": "alter table `t_messages` add INDEX `messages_conv_index` (`_type`, `_target`, `_line`);\nalter table `t_messages_0` add I"
  },
  {
    "path": "broker/migrate/mysql/V51__add_channel_listener_table_member_index.sql",
    "chars": 73,
    "preview": "alter table `t_channel_listener` add INDEX `channel_mid_index` (`_mid`);\n"
  },
  {
    "path": "broker/migrate/mysql/V52__add_channel_menu_column.sql",
    "chars": 62,
    "preview": "alter table `t_channel` add column `_menu` BLOB DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/mysql/V53__add_group_member_mid_index.sql",
    "chars": 74,
    "preview": "alter table `t_group_member` add INDEX `group_member_mid_index` (`_mid`);\n"
  },
  {
    "path": "broker/migrate/mysql/V54__create_super_group.sql",
    "chars": 91466,
    "preview": "alter table `t_group` add column `_super_group` tinyint NOT NULL DEFAULT 0;\n\nDROP TABLE IF EXISTS `t_group_messages`;\nCR"
  },
  {
    "path": "broker/migrate/mysql/V55__group_add_deleted_column.sql",
    "chars": 72,
    "preview": "alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0;\n"
  },
  {
    "path": "broker/migrate/mysql/V56__add_domain_table.sql",
    "chars": 490,
    "preview": "DROP TABLE IF EXISTS `t_domain`;\nCREATE TABLE `t_domain` (\n  `_domain_id` varchar(128) NOT NULL PRIMARY KEY,\n  `_name` v"
  },
  {
    "path": "broker/migrate/mysql/V57__update_group_member_index.sql",
    "chars": 82,
    "preview": "CREATE INDEX `user_gid_mid_dt_index` ON `t_group_member` (`_gid`, `_mid`, `_dt`);\n"
  },
  {
    "path": "broker/migrate/mysql/V58__reupdate_group_member_index.sql",
    "chars": 126,
    "preview": "DROP INDEX `user_gid_mid_dt_index` ON `t_group_member`;\nCREATE INDEX `user_gid_dt_index` ON `t_group_member` (`_gid`, `_"
  },
  {
    "path": "broker/migrate/mysql/V59__add_no_allow_name_setting.sql",
    "chars": 116,
    "preview": "insert into t_settings(`id`, `_value`,`_desc`) values (2, '文件传输助手,客服,官方', '禁止使用名称,如果有多个,以英文逗号隔开。直接修改数据库,不用重启IM服务');\n"
  },
  {
    "path": "broker/migrate/mysql/V5__create_default_robot.sql",
    "chars": 327,
    "preview": "insert into t_user (`_uid`,`_name`,`_display_name`,`_portrait`,`_type`,`_dt`) values ('FireRobot','FireRobot','小火','http"
  },
  {
    "path": "broker/migrate/mysql/V60__modify_messages_target.sql",
    "chars": 2762,
    "preview": "alter table `t_messages` modify column `_target` varchar(129) NOT NULL;\nalter table `t_messages_0` modify column `_targe"
  },
  {
    "path": "broker/migrate/mysql/V61__session_add_ip_column.sql",
    "chars": 70,
    "preview": "ALTER TABLE `t_user_session` ADD COLUMN `_ip` varchar(40) DEFAULT '';\n"
  },
  {
    "path": "broker/migrate/mysql/V64__add_group_member_index.sql",
    "chars": 74,
    "preview": "CREATE INDEX `user_gid_type_index` ON `t_group_member` (`_gid`, `_type`);\n"
  },
  {
    "path": "broker/migrate/mysql/V65__create_conference_table.sql",
    "chars": 461,
    "preview": "\nDROP TABLE IF EXISTS `t_conference`;\nCREATE TABLE `t_conference` (\n  `_id` varchar(64) NOT NULL PRIMARY KEY,\n  `_des` v"
  },
  {
    "path": "broker/migrate/mysql/V66__create_join_group_request_table.sql",
    "chars": 796,
    "preview": "\nDROP TABLE IF EXISTS `t_join_group_request`;\nCREATE TABLE `t_join_group_request` (\n  `id` int(11) NOT NULL PRIMARY KEY "
  },
  {
    "path": "broker/migrate/mysql/V67__create_friend_index.sql",
    "chars": 67,
    "preview": "alter table t_friend add index `friend_uid_index` (`_friend_uid`);\n"
  },
  {
    "path": "broker/migrate/mysql/V6__add_friend_alias.sql",
    "chars": 67,
    "preview": "alter table t_friend add column `_alias` varchar(64) DEFAULT NULL;\n"
  },
  {
    "path": "broker/migrate/mysql/V7__add_createtime_user_group_table.sql",
    "chars": 163,
    "preview": "alter table t_user add column `_createTime` TIMESTAMP default CURRENT_TIMESTAMP;\nalter table t_group add column `_create"
  },
  {
    "path": "broker/migrate/mysql/V8__add_content_type_in_messages.sql",
    "chars": 3050,
    "preview": "alter table `t_messages_0` add column `_content_type` int(11) NOT NULL DEFAULT '0';\nalter table `t_messages_1` add colum"
  },
  {
    "path": "broker/migrate/mysql/V9__add_sensitive_messages.sql",
    "chars": 593,
    "preview": "\nDROP TABLE IF EXISTS `t_sensitive_messages`;\nCREATE TABLE `t_sensitive_messages` (\n    `id` int(11) NOT NULL PRIMARY KE"
  },
  {
    "path": "broker/migrate/重要!!!必看!!!.txt",
    "chars": 215,
    "preview": "程序会自动创建数据库和执行migrate里的数据库,不需要手动创建库和执行sql语句。\n\n数据库版本管理使用了flyway,flyway进行数据库升级时会校验数据库脚本的有效性,如果修改过这里的脚本,下次升级时就会失败。\n\n强烈不建议修改数"
  },
  {
    "path": "broker/nginx/imserver.conf",
    "chars": 1495,
    "preview": "upstream imserver  {\n    server 127.0.0.1:8080; #Apache\n}\n\nserver {\n    listen 80;\n    server_name  www.wildfirechat.cn;"
  },
  {
    "path": "broker/pom.xml",
    "chars": 9166,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
  },
  {
    "path": "broker/src/main/java/cn/wildfirechat/push/PushMessage.java",
    "chars": 3230,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/cn/wildfirechat/push/PushServer.java",
    "chars": 5622,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/cn/wildfirechat/server/Server.java",
    "chars": 439,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/cn/wildfirechat/server/ThreadPoolExecutorWrapper.java",
    "chars": 1720,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/LoFileServer.java",
    "chars": 3878,
    "preview": "package com.xiaoleilu.loServer;\n\nimport cn.hutool.core.date.DateUtil;\nimport com.xiaoleilu.loServer.action.Action;\nimpor"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/LoServer.java",
    "chars": 6347,
    "preview": "package com.xiaoleilu.loServer;\n\nimport cn.hutool.core.date.DateUtil;\nimport com.xiaoleilu.loServer.action.Action;\nimpor"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/RestResult.java",
    "chars": 1684,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/ServerSetting.java",
    "chars": 8245,
    "preview": "package com.xiaoleilu.loServer;\n\nimport java.io.File;\nimport java.nio.charset.Charset;\nimport java.util.Map;\nimport java"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/Action.java",
    "chars": 6493,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/CheckTokenAction.java",
    "chars": 3451,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/ClassUtil.java",
    "chars": 8197,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/DefaultIndexAction.java",
    "chars": 501,
    "preview": "package com.xiaoleilu.loServer.action;\n\nimport com.hazelcast.core.HazelcastInstance;\nimport com.xiaoleilu.loServer.handl"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java",
    "chars": 4965,
    "preview": "package com.xiaoleilu.loServer.action;\n\nimport java.io.File;\nimport java.io.IOException;\nimport java.io.UnsupportedEncod"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java",
    "chars": 5115,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/NotFoundAction.java",
    "chars": 1121,
    "preview": "package com.xiaoleilu.loServer.action;\n\nimport com.hazelcast.core.HazelcastInstance;\nimport com.xiaoleilu.loServer.handl"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java",
    "chars": 7416,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/UnknownErrorAction.java",
    "chars": 1123,
    "preview": "package com.xiaoleilu.loServer.action;\n\nimport java.io.PrintWriter;\nimport java.io.StringWriter;\n\nimport com.hazelcast.c"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/UploadFileAction.java",
    "chars": 14360,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/VersionAction.java",
    "chars": 1580,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddFriendRequestAction.java",
    "chars": 2155,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/AddGroupMemberAction.java",
    "chars": 2030,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/AdminAction.java",
    "chars": 5295,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/AliasGetAction.java",
    "chars": 2031,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/AliasPutAction.java",
    "chars": 2682,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/ApplicationGetUserInfoAction.java",
    "chars": 2525,
    "preview": "package com.xiaoleilu.loServer.action.admin;\n\nimport cn.wildfirechat.common.APIPath;\nimport cn.wildfirechat.common.Error"
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlacklistAction.java",
    "chars": 2385,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlacklistGetAction.java",
    "chars": 1842,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/BlockUserAction.java",
    "chars": 2265,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/BroadcastMessageAction.java",
    "chars": 2498,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/ChannelSubscriberAction.java",
    "chars": 2758,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserOnlineAction.java",
    "chars": 1917,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CheckUserSubscribeChannelAction.java",
    "chars": 2173,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChannelAction.java",
    "chars": 2943,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateChatroomAction.java",
    "chars": 2415,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateGroupAction.java",
    "chars": 2469,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateRobotAction.java",
    "chars": 3259,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/CreateUserAction.java",
    "chars": 4579,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestoryChatroomAction.java",
    "chars": 1996,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestroyChannelAction.java",
    "chars": 2527,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/DestroyUserAction.java",
    "chars": 2085,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/DismissGroupAction.java",
    "chars": 2009,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendExtraPutAction.java",
    "chars": 2174,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationAction.java",
    "chars": 2639,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/FriendRelationGetAction.java",
    "chars": 1951,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetAllUserAction.java",
    "chars": 2202,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetBatchUserAction.java",
    "chars": 2319,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChannelAction.java",
    "chars": 1986,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomInfoAction.java",
    "chars": 2087,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetChatroomMembersAction.java",
    "chars": 2463,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetCommonGroupsAction.java",
    "chars": 2012,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupInfoAction.java",
    "chars": 3480,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMemberAction.java",
    "chars": 2744,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetGroupMembersAction.java",
    "chars": 3139,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetIMTokenAction.java",
    "chars": 2744,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetMessageAction.java",
    "chars": 2092,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetOnlineUserAction.java",
    "chars": 1698,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetRobotAction.java",
    "chars": 2320,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetSystemSettingAction.java",
    "chars": 2030,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUploadUrlAction.java",
    "chars": 5736,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserAction.java",
    "chars": 2686,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockListAction.java",
    "chars": 1387,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserBlockStatusAction.java",
    "chars": 1790,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserChatroomAction.java",
    "chars": 2164,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  },
  {
    "path": "broker/src/main/java/com/xiaoleilu/loServer/action/admin/GetUserGroupsAction.java",
    "chars": 2125,
    "preview": "/*\n * This file is part of the Wildfire Chat package.\n * (c) Heavyrain2012 <heavyrain.lee@gmail.com>\n *\n * For the full "
  }
]

// ... and 575 more files (download for full content)

About this extraction

This page contains the full source code of the wildfirechat/im-server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 775 files (4.9 MB), approximately 1.3M tokens, and a symbol index with 12063 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!