Enford 5 vuotta sitten
vanhempi
commit
8bc1b24c3d

+ 12 - 0
src/main/java/com/easemob/server/example/api/AuthTokenAPI.java

@@ -0,0 +1,12 @@
+package com.easemob.server.example.api;
+
+import io.swagger.client.ApiException;
+
+public interface AuthTokenAPI{
+	/**
+	 * Request an Authentication Token
+	 * @return String
+	 * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+	 */
+	Object getAuthToken ();
+}

+ 197 - 0
src/main/java/com/easemob/server/example/api/ChatGroupAPI.java

@@ -0,0 +1,197 @@
+package com.easemob.server.example.api;
+
+/**
+ * This interface is created for RestAPI of Chat Group, it should be
+ * synchronized with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/:
+ *      60groupmgmt
+ */
+public interface ChatGroupAPI {
+
+	/**
+	 * 获取群组,参数为空时获取所有群组 <br>
+	 * GET
+	 * 
+	 * @param limit
+	 *            单页数量
+	 * @param cursor
+	 *            游标,存在更多记录时产生
+	 * @return
+	 */
+	Object getChatGroups(Long limit, String cursor);
+
+	/**
+	 * 获取一个或者多个群组的详情 <br>
+	 * GET
+	 * 
+	 * @param groupIds
+	 *            群组ID数组
+	 * @return
+	 */
+	Object getChatGroupDetails(String[] groupIds);
+
+	/**
+	 * 创建一个群组 <br>
+	 * POST
+	 * 
+	 * @param payload
+	 *            <code>{"groupname":"testrestgrp12","desc":"server create group","public":true,"maxusers":300,"approval":true,"owner":"jma1","members":["jma2","jma3"]}</code>
+	 * @return
+	 */
+	Object createChatGroup(Object payload);
+
+	/**
+	 * 修改群组信息 <br>
+	 * PUT
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param payload
+	 *            <code>{"groupname":"testrestgrp12",description":"update groupinfo","maxusers":300}</code>
+	 * @return
+	 */
+	Object modifyChatGroup(String groupId, Object payload);
+
+	/**
+	 * 删除群组 <br>
+	 * DELETE
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @return
+	 */
+	Object deleteChatGroup(String groupId);
+
+	/**
+	 * 获取群组所有用户 <br>
+	 * GET
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @return
+	 */
+	Object getChatGroupUsers(String groupId);
+
+	/**
+	 * 群组加人[单个] <br>
+	 * POST
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userId
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object addSingleUserToChatGroup(String groupId, String userId);
+
+	/**
+	 * 群组加人[批量] <br>
+	 * POST
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param payload
+	 *            用户ID或用户名,数组形式
+	 * @return
+	 * @see com.easemob.server.example.comm.body.UserNamesBody
+	 */
+	Object addBatchUsersToChatGroup(String groupId, Object payload);
+
+	/**
+	 * 群组减人[单个] <br>
+	 * DELETE
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userId
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object removeSingleUserFromChatGroup(String groupId, String userId);
+
+	/**
+	 * 群组减人[批量] <br>
+	 * DELETE
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userIds
+	 *            用户ID或用户名,数组形式
+	 * @return
+	 */
+	Object removeBatchUsersFromChatGroup(String groupId, String[] userIds);
+
+	/**
+	 * 群组转让 <br>
+	 * PUT
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param payload
+	 *            新群主ID或用户名
+	 * @return
+     * @see com.easemob.server.example.comm.body.GroupOwnerTransferBody
+	 */
+	Object transferChatGroupOwner(String groupId, Object payload);
+
+	/**
+	 * 查询群组黑名单 <br>
+	 * GET
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @return
+	 */
+	Object getChatGroupBlockUsers(String groupId);
+
+	/**
+	 * 群组黑名单个添加 <br>
+	 * POST
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userId
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object addSingleBlockUserToChatGroup(String groupId, String userId);
+
+	/**
+	 * 群组黑名单批量添加 <br>
+	 * POST
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param payload
+	 *            用户ID或用户名,数组形式
+	 * @return
+     * @see com.easemob.server.example.comm.body.UserNamesBody
+	 */
+	Object addBatchBlockUsersToChatGroup(String groupId, Object payload);
+
+	/**
+	 * 群组黑名单单个删除 <br>
+	 * DELETE
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userId
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object removeSingleBlockUserFromChatGroup(String groupId, String userId);
+
+	/**
+	 * 群组黑名单批量删除 <br>
+	 * DELETE
+	 * 
+	 * @param groupId
+	 *            群组标识
+	 * @param userIds
+	 *            用户ID或用户名,数组形式
+	 * @return
+	 */
+	Object removeBatchBlockUsersFromChatGroup(String groupId, String[] userIds);
+}

+ 26 - 0
src/main/java/com/easemob/server/example/api/ChatMessageAPI.java

@@ -0,0 +1,26 @@
+package com.easemob.server.example.api;
+
+/**
+ * This interface is created for RestAPI of Chat Messages, it should be
+ * synchronized with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/
+ */
+public interface ChatMessageAPI {
+	/**
+	 * 导出聊天记录,默认返回10条 <br>
+	 * GET
+	 * 
+	 * @param limit
+	 *            单页条数,最多1000
+	 * @param cursor
+	 *            游标,存在更多页时产生
+	 * @param query
+	 *            查询语句 <code>ql=select * where timestamp>1403164734226</code>
+	 * @return
+	 *
+	 * 此接口已经过期,下个版本将会提供新接口
+	 */
+	Object exportChatMessages(Long limit, String cursor, String query);
+}

+ 110 - 0
src/main/java/com/easemob/server/example/api/ChatRoomAPI.java

@@ -0,0 +1,110 @@
+package com.easemob.server.example.api;
+
+/**
+ * This interface is created for RestAPI of Chat Room, it should be synchronized
+ * with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/
+ */
+public interface ChatRoomAPI {
+	/**
+	 * 创建聊天室 <br>
+	 * POST
+	 * 
+	 * @param payload
+	 *            <code>{name":"testchatroom","description":"server create chatroom","maxusers":300,"owner":"jma1","members":["jma2","jma3"]}</code>
+	 * @return
+	 */
+	Object createChatRoom(Object payload);
+
+	/**
+	 * 修改聊天室信息 <br>
+	 * PUT
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @param payload
+	 *            <code>{"name":"test chatroom","description":
+	 *            "update chatroominfo","maxusers":200}
+	 * @return
+	 */
+	Object modifyChatRoom(String roomId, Object payload);
+
+	/**
+	 * 删除聊天室 <br>
+	 * DELETE
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @return
+	 */
+	Object deleteChatRoom(String roomId);
+
+	/**
+	 * 获取app中所有的聊天室 <br>
+	 * GET
+	 * 
+	 * @return
+	 */
+	Object getAllChatRooms();
+
+	/**
+	 * 获取一个聊天室详情 <br>
+	 * GET
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @return
+	 */
+	Object getChatRoomDetail(String roomId);
+
+	/**
+	 * 聊天室成员添加[单个] <br>
+	 * POST
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @param userName
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object addSingleUserToChatRoom(String roomId, String userName);
+
+	/**
+	 * 聊天室成员添加[批量] <br>
+	 * POST
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @param payload
+	 *            用户ID或用户名,数组形式
+	 * @return
+	 * @see com.easemob.server.example.comm.body.UserNamesBody
+	 */
+	Object addBatchUsersToChatRoom(String roomId, Object payload);
+
+	/**
+	 * 聊天室成员删除[单个] <br>
+	 * DELETE
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @param userName
+	 *            用户ID或用户名
+	 * @return
+	 */
+	Object removeSingleUserFromChatRoom(String roomId, String userName);
+
+	/**
+	 * 聊天室成员删除[批量] <br>
+	 * DELETE
+	 * 
+	 * @param roomId
+	 *            聊天室标识
+	 * @param userNames
+	 *            用户ID或用户名,数组形式
+	 * @return
+	 */
+	Object removeBatchUsersFromChatRoom(String roomId, String[] userNames);
+}

+ 35 - 0
src/main/java/com/easemob/server/example/api/FileAPI.java

@@ -0,0 +1,35 @@
+package com.easemob.server.example.api;
+
+/**
+ * This interface is created for RestAPI of File Upload and Download, it should
+ * be synchronized with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/
+ */
+public interface FileAPI {
+
+	/**
+	 * 上传文件 <br>
+	 * POST
+	 * 
+	 * @param file
+	 *            上传的文件对象,可以是地址、流等,以实现类为准
+	 * @return
+	 */
+	Object uploadFile(Object file);
+
+	/**
+	 * 下载文件 <br>
+	 * GET
+	 * 
+	 * @param fileUUID
+	 *            文件唯一标识,从上传Response-entities-uuid中获取
+	 * @param shareSecret
+	 *            文件访问秘钥,从上传Response-entities-share-secret中获取
+	 * @param isThumbnail
+	 *            ,如果下载图片,是否为缩略图
+	 * @return
+	 */
+	Object downloadFile(String fileUUID, String shareSecret, Boolean isThumbnail);
+}

+ 251 - 0
src/main/java/com/easemob/server/example/api/IMUserAPI.java

@@ -0,0 +1,251 @@
+package com.easemob.server.example.api;
+
+/**
+ * This interface is created for RestAPI of User Integration, it should be
+ * synchronized with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/
+ */
+public interface IMUserAPI {
+
+	/**
+	 * 注册IM用户[单个] <br>
+	 * POST
+	 * 
+	 * @param payload
+	 *            <code>{"username":"${用户名}","password":"${密码}", "nickname":"${昵称值}"}</code>
+	 * @return
+	 */
+	Object createNewIMUserSingle(Object payload);
+
+	/**
+	 * 注册IM用户[批量] <br>
+	 * POST
+	 * 
+	 * @param payload
+	 *            <code>[{"username":"${用户名1}","password":"${密码}"},…,{"username":"${用户名2}","password":"${密码}"}]</code>
+	 * @return
+	 */
+	Object createNewIMUserBatch(Object payload);
+
+	/**
+	 * 获取IM用户[单个] <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object getIMUserByUserName(String userName);
+
+	/**
+	 * 获取IM用户[批量],参数为空时默认返回最早创建的10个用户 <br>
+	 * GET
+	 * 
+	 * @param limit
+	 *            单页获取数量
+	 * @param cursor
+	 *            游标,大于单页记录时会产生
+	 * @return
+	 */
+	Object getIMUsersBatch(Long limit, String cursor);
+
+	/**
+	 * 删除IM用户[单个] <br>
+	 * DELETE
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object deleteIMUserByUserName(String userName);
+
+	/**
+	 * 删除IM用户[批量],随机删除 <br>
+	 * DELETE
+	 * 
+	 * @param limit
+	 *            删除数量,建议100-500
+	 * @return
+	 */
+	Object deleteIMUserBatch(Long limit, String cursor);
+
+	/**
+	 * 重置IM用户密码 <br>
+	 * PUT
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param payload
+	 *            <code>{"newpassword" : "${新密码指定的字符串}"}</code>
+	 * @return
+	 */
+	Object modifyIMUserPasswordWithAdminToken(String userName, Object payload);
+
+	/**
+	 * 修改用户昵称 <br>
+	 * PUT
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param payload
+	 *            <code>{"nickname" : "${昵称值}"}</code>
+	 * @return
+	 */
+	Object modifyIMUserNickNameWithAdminToken(String userName, Object payload);
+
+	/**
+	 * 给IM用户的添加好友 <br>
+	 * POST
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param friendName
+	 *            好友用戶名或用戶ID
+	 * @return
+	 */
+	Object addFriendSingle(String userName, String friendName);
+
+	/**
+	 * 解除IM用户的好友关系 <br>
+	 * DELETE
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param friendName
+	 *            好友用戶名或用戶ID
+	 * @return
+	 */
+	Object deleteFriendSingle(String userName, String friendName);
+
+	/**
+	 * 查看某个IM用户的好友信息 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object getFriends(String userName);
+
+	/**
+	 * 获取IM用户的黑名单 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object getBlackList(String userName);
+
+	/**
+	 * 往IM用户的黑名单中加人 <br>
+	 * POST
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param payload
+	 *            <code>{"usernames":["5cxhactgdj", "mh2kbjyop1"]}</code>
+	 * @return
+	 */
+	Object addToBlackList(String userName, Object payload);
+
+	/**
+	 * 从IM用户的黑名单中减人 <br>
+	 * DELETE
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param blackListName
+	 *            黑名单用戶名或用戶ID
+	 * @return
+	 */
+	Object removeFromBlackList(String userName, String blackListName);
+
+	/**
+	 * 查看用户在线状态 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object getIMUserStatus(String userName);
+
+	/**
+	 * 查询离线消息数 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object getOfflineMsgCount(String userName);
+
+	/**
+	 * 查询某条离线消息状态 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @param msgId
+	 *            消息ID
+	 * @return
+	 */
+	Object getSpecifiedOfflineMsgStatus(String userName, String msgId);
+
+	/**
+	 * 用户账号禁用 <br>
+	 * POST
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object deactivateIMUser(String userName);
+
+	/**
+	 * 用户账号解禁 <br>
+	 * POST
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object activateIMUser(String userName);
+
+	/**
+	 * 强制用户下线 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 */
+	Object disconnectIMUser(String userName);
+
+	/**
+	 * 获取用户参与的群组 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 * @see http://docs.easemob.com/doku.php?id=start:100serverintegration:
+	 *      60groupmgmt
+	 */
+	Object getIMUserAllChatGroups(String userName);
+
+	/**
+	 * 获取用户所有参与的聊天室 <br>
+	 * GET
+	 * 
+	 * @param userName
+	 *            用戶名或用戶ID
+	 * @return
+	 * @see http://docs.easemob.com/doku.php?id=start:100serverintegration:
+	 *      70chatroommgmt
+	 */
+	Object getIMUserAllChatRooms(String userName);
+}

+ 14 - 0
src/main/java/com/easemob/server/example/api/SendMessageAPI.java

@@ -0,0 +1,14 @@
+package com.easemob.server.example.api;
+
+
+/**
+ * This interface is created for RestAPI of Sending Message, it should be
+ * synchronized with the API list.
+ * 
+ * @author Eric23 2016-01-05
+ * @see http://docs.easemob.com/
+ */
+public interface SendMessageAPI {
+
+	Object sendMessage(Object payload);
+}

+ 15 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobAuthToken.java

@@ -0,0 +1,15 @@
+package com.easemob.server.example.api.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.AuthTokenAPI;
+import com.easemob.server.example.comm.TokenUtil;
+
+@Service
+public class EasemobAuthToken implements AuthTokenAPI{
+
+	@Override
+	public Object getAuthToken(){
+		return TokenUtil.getAccessToken();
+	}
+}

+ 183 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobChatGroup.java

@@ -0,0 +1,183 @@
+package com.easemob.server.example.api.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.ChatGroupAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.StringUtil;
+import io.swagger.client.api.GroupsApi;
+import io.swagger.client.model.*;
+
+@Service
+public class EasemobChatGroup implements ChatGroupAPI {
+
+    private ResponseHandler responseHandler = new ResponseHandler();
+    private GroupsApi api = new GroupsApi();
+    @Override
+    public Object getChatGroups(final Long limit,final String cursor) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),limit+"",cursor);
+            }
+        });
+    }
+
+    @Override
+    public Object getChatGroupDetails(final String[] groupIds) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdsGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),StringUtil.join(groupIds,","));
+            }
+        });
+    }
+    @Override
+    public Object createChatGroup(final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(), (Group) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object modifyChatGroup(final String groupId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdPut(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId, (ModifyGroup) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object deleteChatGroup(final String groupId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId);
+            }
+        });
+    }
+
+    @Override
+    public Object getChatGroupUsers(final String groupId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdUsersGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId);
+            }
+        });
+    }
+
+    @Override
+    public Object addSingleUserToChatGroup(final String groupId,final String userId) {
+        final UserNames userNames = new UserNames();
+        UserName userList = new UserName();
+        userList.add(userId);
+        userNames.usernames(userList);
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,userNames);
+            }
+        });
+    }
+
+    @Override
+    public Object addBatchUsersToChatGroup(final String groupId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId, (UserNames) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object removeSingleUserFromChatGroup(final String groupId,final String userId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdUsersUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,userId);
+            }
+        });
+    }
+
+    @Override
+    public Object removeBatchUsersFromChatGroup(final String groupId,final String[] userIds) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdUsersMembersDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,StringUtil.join(userIds,","));
+            }
+        });
+    }
+
+    @Override
+    public Object transferChatGroupOwner(final String groupId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupidPut(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId, (NewOwner) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object getChatGroupBlockUsers(final String groupId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdBlocksUsersGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId);
+            }
+        });
+    }
+
+    @Override
+    public Object addSingleBlockUserToChatGroup(final String groupId,final String userId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdBlocksUsersUsernamePost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,userId);
+            }
+        });
+    }
+
+    @Override
+    public Object addBatchBlockUsersToChatGroup(final String groupId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdBlocksUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId, (UserNames) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object removeSingleBlockUserFromChatGroup(final String groupId,final String userId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdBlocksUsersUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,userId);
+            }
+        });
+    }
+
+    @Override
+    public Object removeBatchBlockUsersFromChatGroup(final String groupId,final String[] userIds) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatgroupsGroupIdBlocksUsersUsernamesDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),groupId,StringUtil.join(userIds,","));
+            }
+        });
+    }
+}

+ 38 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobChatMessage.java

@@ -0,0 +1,38 @@
+package com.easemob.server.example.api.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.ChatMessageAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.api.ChatHistoryApi;
+
+@Service
+public class EasemobChatMessage  implements ChatMessageAPI {
+
+    private ResponseHandler responseHandler = new ResponseHandler();
+    private ChatHistoryApi api = new ChatHistoryApi();
+
+    @Override
+    public Object exportChatMessages(final Long limit,final String cursor,final String query) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatmessagesGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),query,limit+"",cursor);
+            }
+        });
+    }
+
+    public Object exportChatMessage(final String time) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatmessagesTimeGet(OrgInfo.ORG_NAME, OrgInfo.APP_NAME, TokenUtil.getAccessToken(), time);
+            }
+        });
+    }
+}

+ 113 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobChatRoom.java

@@ -0,0 +1,113 @@
+package com.easemob.server.example.api.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.ChatRoomAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.StringUtil;
+import io.swagger.client.api.ChatRoomsApi;
+import io.swagger.client.model.Chatroom;
+import io.swagger.client.model.ModifyChatroom;
+import io.swagger.client.model.UserNames;
+
+
+@Service
+public class EasemobChatRoom implements ChatRoomAPI {
+    private ResponseHandler responseHandler = new ResponseHandler();
+    private ChatRoomsApi api = new ChatRoomsApi();
+
+    @Override
+    public Object createChatRoom(final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(), (Chatroom) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object modifyChatRoom(final String roomId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdPut(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId, (ModifyChatroom) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object deleteChatRoom(final String roomId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId);
+            }
+        });
+    }
+
+    @Override
+    public Object getAllChatRooms() {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken());
+            }
+        });
+    }
+
+    @Override
+    public Object getChatRoomDetail(final String roomId) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId);
+            }
+        });
+    }
+
+    @Override
+    public Object addSingleUserToChatRoom(final String roomId,final String userName) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdUsersUsernamePost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId,userName);
+            }
+        });
+    }
+
+    @Override
+    public Object addBatchUsersToChatRoom(final String roomId,final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId, (UserNames) payload);
+            }
+        });
+    }
+
+    @Override
+    public Object removeSingleUserFromChatRoom(final String roomId,final String userName) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdUsersUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId,userName);
+            }
+        });
+    }
+
+    @Override
+    public Object removeBatchUsersFromChatRoom(final String roomId,final String[] userNames) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatroomsChatroomIdUsersUsernamesDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),roomId, StringUtil.join(userNames,","));
+            }
+        });
+    }
+}

+ 39 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobFile.java

@@ -0,0 +1,39 @@
+package com.easemob.server.example.api.impl;
+
+import com.easemob.server.example.api.FileAPI;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.api.UploadAndDownloadFilesApi;
+
+import java.io.File;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class EasemobFile implements FileAPI {
+    private ResponseHandler responseHandler = new ResponseHandler();
+    private UploadAndDownloadFilesApi api = new UploadAndDownloadFilesApi();
+    @Override
+    public Object uploadFile(final Object file) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameChatfilesPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),(File)file,true);
+             }
+        });
+    }
+
+    @Override
+    public Object downloadFile(final String fileUUID,final  String shareSecret,final Boolean isThumbnail) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+               return api.orgNameAppNameChatfilesUuidGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),fileUUID,shareSecret,isThumbnail);
+            }
+        });
+    }
+}

+ 243 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobIMUsers.java

@@ -0,0 +1,243 @@
+package com.easemob.server.example.api.impl;
+
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.IMUserAPI;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.api.UsersApi;
+import io.swagger.client.model.NewPassword;
+import io.swagger.client.model.Nickname;
+import io.swagger.client.model.RegisterUsers;
+import io.swagger.client.model.UserNames;
+
+@Service
+public class EasemobIMUsers  implements IMUserAPI {
+
+	private UsersApi api = new UsersApi();
+	private ResponseHandler responseHandler = new ResponseHandler();
+	@Override
+	public Object createNewIMUserSingle(final Object payload) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME, (RegisterUsers) payload,TokenUtil.getAccessToken());
+			}
+		});
+	}
+
+	@Override
+	public Object createNewIMUserBatch(final Object payload) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME, (RegisterUsers) payload,TokenUtil.getAccessToken());
+			}
+		});
+	}
+
+	@Override
+	public Object getIMUserByUserName(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+		}
+		});
+	}
+
+	@Override
+	public Object getIMUsersBatch(final Long limit,final String cursor) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),limit+"",cursor);
+			}
+		});
+	}
+
+	@Override
+	public Object deleteIMUserByUserName(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object deleteIMUserBatch(final Long limit,final String cursor) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),limit+"",cursor);
+			}
+		});
+	}
+
+	@Override
+	public Object modifyIMUserPasswordWithAdminToken(final String userName, final Object payload) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernamePasswordPut(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,userName, (NewPassword) payload,TokenUtil.getAccessToken());
+			}
+		});
+	}
+
+	@Override
+	public Object modifyIMUserNickNameWithAdminToken(final String userName,final Object payload) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernamePut(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,userName, (Nickname) payload,TokenUtil.getAccessToken());
+			}
+		});
+	}
+
+	@Override
+	public Object addFriendSingle(final String userName,final String friendName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameContactsUsersFriendUsernamePost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName,friendName);
+			}
+		});
+	}
+
+	@Override
+	public Object deleteFriendSingle(final String userName,final String friendName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameContactsUsersFriendUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName,friendName);
+			}
+		});
+	}
+
+	@Override
+	public Object getFriends(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameContactsUsersGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object getBlackList(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameBlocksUsersGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object addToBlackList(final String userName,final Object payload) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameBlocksUsersPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName, (UserNames) payload);
+			}
+		});
+	}
+
+	@Override
+	public Object removeFromBlackList(final String userName,final String blackListName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameBlocksUsersBlockedUsernameDelete(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName,blackListName);
+			}
+		});
+	}
+
+	@Override
+	public Object getIMUserStatus(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameStatusGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object getOfflineMsgCount(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersOwnerUsernameOfflineMsgCountGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object getSpecifiedOfflineMsgStatus(final String userName,final String msgId) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameOfflineMsgStatusMsgIdGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName,msgId);
+			}
+		});
+	}
+
+	@Override
+	public Object deactivateIMUser(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameDeactivatePost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object activateIMUser(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameActivatePost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object disconnectIMUser(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameDisconnectGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object getIMUserAllChatGroups(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameJoinedChatgroupsGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+
+	@Override
+	public Object getIMUserAllChatRooms(final String userName) {
+		return responseHandler.handle(new EasemobAPI() {
+			@Override
+			public Object invokeEasemobAPI() throws ApiException {
+				return api.orgNameAppNameUsersUsernameJoinedChatroomsGet(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(),userName);
+			}
+		});
+	}
+}

+ 28 - 0
src/main/java/com/easemob/server/example/api/impl/EasemobSendMessage.java

@@ -0,0 +1,28 @@
+package com.easemob.server.example.api.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.easemob.server.example.api.SendMessageAPI;
+import com.easemob.server.example.comm.OrgInfo;
+import com.easemob.server.example.comm.ResponseHandler;
+import com.easemob.server.example.comm.EasemobAPI;
+import com.easemob.server.example.comm.TokenUtil;
+
+import io.swagger.client.ApiException;
+import io.swagger.client.api.MessagesApi;
+import io.swagger.client.model.Msg;
+
+@Service
+public class EasemobSendMessage implements SendMessageAPI {
+    private ResponseHandler responseHandler = new ResponseHandler();
+    private MessagesApi api = new MessagesApi();
+    @Override
+    public Object sendMessage(final Object payload) {
+        return responseHandler.handle(new EasemobAPI() {
+            @Override
+            public Object invokeEasemobAPI() throws ApiException {
+                return api.orgNameAppNameMessagesPost(OrgInfo.ORG_NAME,OrgInfo.APP_NAME,TokenUtil.getAccessToken(), (Msg) payload);
+            }
+        });
+    }
+}

+ 10 - 0
src/main/java/com/easemob/server/example/comm/EasemobAPI.java

@@ -0,0 +1,10 @@
+package com.easemob.server.example.comm;
+
+import io.swagger.client.ApiException;
+
+/**
+ * Created by easemob on 2017/3/16.
+ */
+public interface EasemobAPI {
+    Object invokeEasemobAPI() throws ApiException;
+}

+ 30 - 0
src/main/java/com/easemob/server/example/comm/OrgInfo.java

@@ -0,0 +1,30 @@
+package com.easemob.server.example.comm;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * Created by easemob on 2017/3/31.
+ */
+public class OrgInfo {
+
+    public static String ORG_NAME;
+    public static String APP_NAME;
+    public static final Logger logger = LoggerFactory.getLogger(OrgInfo.class);
+
+    static {
+        InputStream inputStream = OrgInfo.class.getClassLoader().getResourceAsStream("jeeplus.properties");
+        Properties prop = new Properties();
+        try {
+            prop.load(inputStream);
+        } catch (IOException e) {
+            logger.error(e.getMessage());
+        }
+        ORG_NAME = prop.getProperty("ORG_NAME");
+        APP_NAME = prop.getProperty("APP_NAME");
+    }
+}

+ 70 - 0
src/main/java/com/easemob/server/example/comm/ResponseHandler.java

@@ -0,0 +1,70 @@
+package com.easemob.server.example.comm;
+
+import com.google.gson.Gson;
+import io.swagger.client.ApiException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by easemob on 2017/3/16.
+ */
+public class ResponseHandler {
+    private static final Logger logger = LoggerFactory.getLogger(ResponseHandler.class);
+
+    public Object handle(EasemobAPI easemobAPI) {
+        Object result = null;
+        try {
+            result = easemobAPI.invokeEasemobAPI();
+        } catch (ApiException e) {
+            if (e.getCode() == 401) {
+                logger.info("The current token is invalid, re-generating token for you and calling it again");
+                TokenUtil.initTokenByProp();
+                try {
+                    result = easemobAPI.invokeEasemobAPI();
+                } catch (ApiException e1) {
+                    logger.error(e1.getMessage());
+                }
+                return result;
+            }
+            if (e.getCode() == 429) {
+                logger.warn("The api call is too frequent");
+            }
+            if (e.getCode() >= 500) {
+                logger.info("The server connection failed and is being reconnected");
+                result = retry(easemobAPI);
+                if (result != null) {
+                    return result;
+                }
+                System.out.println(e);
+                logger.error("The server may be faulty. Please try again later");
+            }
+            Gson gson = new Gson();
+            Map<String, String> map = gson.fromJson(e.getResponseBody(), Map.class);
+            logger.error("error_code:{} error_msg:{} error_desc:{}", e.getCode(), e.getMessage(), map.get("error_description"));
+        }
+        return result;
+    }
+
+    public Object retry(EasemobAPI easemobAPI) {
+        Object result = null;
+        long time = 5;
+        for (int i = 0; i < 3; i++) {
+            try {
+                TimeUnit.SECONDS.sleep(time);
+                logger.info("Reconnection is in progress..." + i);
+                result = easemobAPI.invokeEasemobAPI();
+                if (result != null) {
+                    return result;
+                }
+            } catch (ApiException e1) {
+                time *= 3;
+            } catch (InterruptedException e1) {
+                logger.error(e1.getMessage());
+            }
+        }
+        return result;
+    }
+}

+ 75 - 0
src/main/java/com/easemob/server/example/comm/TokenUtil.java

@@ -0,0 +1,75 @@
+package com.easemob.server.example.comm;
+
+import com.google.gson.Gson;
+import io.swagger.client.ApiException;
+import io.swagger.client.api.AuthenticationApi;
+import io.swagger.client.model.Token;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Created by easemob on 2017/3/14.
+ */
+public class TokenUtil {
+    public static String GRANT_TYPE;
+    private static String CLIENT_ID;
+    private static String CLIENT_SECRET;
+    private static Token BODY;
+    private static AuthenticationApi API = new AuthenticationApi();
+    private static String ACCESS_TOKEN;
+    private static Double EXPIREDAT = -1D;
+    private static final Logger logger = LoggerFactory.getLogger(TokenUtil.class);
+
+    /**
+     * get token from server
+     */
+    static {
+        InputStream inputStream = TokenUtil.class.getClassLoader().getResourceAsStream("jeeplus.properties");
+        Properties prop = new Properties();
+        try {
+            prop.load(inputStream);
+        } catch (IOException e) {
+            logger.error(e.getMessage());
+        }
+        GRANT_TYPE = prop.getProperty("GRANT_TYPE");
+        CLIENT_ID = prop.getProperty("CLIENT_ID");
+        CLIENT_SECRET = prop.getProperty("CLIENT_SECRET");
+        BODY = new Token().clientId(CLIENT_ID).grantType(GRANT_TYPE).clientSecret(CLIENT_SECRET);
+    }
+
+    public static void initTokenByProp() {
+        String resp = null;
+        try {
+            resp = API.orgNameAppNameTokenPost(OrgInfo.ORG_NAME, OrgInfo.APP_NAME, BODY);
+        } catch (ApiException e) {
+            logger.error(e.getMessage());
+        }
+        Gson gson = new Gson();
+        Map map = gson.fromJson(resp, Map.class);
+        ACCESS_TOKEN = " Bearer " + map.get("access_token");
+        EXPIREDAT = System.currentTimeMillis() + (Double) map.get("expires_in");
+    }
+
+    /**
+     * get Token from memory
+     *
+     * @return
+     */
+    public static String getAccessToken() {
+        if (ACCESS_TOKEN == null || isExpired()) {
+            initTokenByProp();
+        }
+        return ACCESS_TOKEN;
+    }
+
+    private static Boolean isExpired() {
+        return System.currentTimeMillis() > EXPIREDAT;
+    }
+
+}
+