/** * IM客户端SDK。此SDK可以连接开发、测试或生产环境,根据需要配置环境参数以连接到不同的服务器。 */ // 本地临时缓存Key var LocalStorageKey = { userId: "im_userid" }; // 服务器 var server = "http://127.0.0.1:3008"; // 资源实体在URL中的占位符 var UserPath = ":user_id"; var SessionPath = ":session_id"; var TopicPath = ":topic+id"; var ParticipantPath = ":participant_id"; // REST API var ENDPOINTS = { Application: { BadgeNo: '/api/v2/application/badge_no' }, Management: { Health: '/api/v2/management/health', DbStatus: '/db' }, Users: { Login: '/api/v2/users/login', Logout: '/api/v2/users/logout', User: '/api/v2/users/:user_id', UserStatus: '/api/v2/users/:user_id/status' }, Sessions: { Session: '/api/v2/sessions/:session_id', SessionSticky: '/api/v2/sessions/:session_id/sticky', RecentSessions: '/api/v2/sessions/recent', Topics: '/api/v2/sessions/:session_id/topics', Topic: '/api/v2/sessions/:session_id/topics/:topic_id', TopicEnded: '/api/v2/sessions/:session_id/topics/:topic_id/ended', Messages: '/api/v2/sessions/:session_id/messages', MessagesByTopic: '/api/v2/sessions/:session_id/topics/:topic_id/messages', Message: '/api/v2/sessions/:session_id/messages/:message_id', SessionsUnreadMessageCount: '/api/v2/sessions/unread_message_count', SessionUnreadMessageCount: '/api/v2/sessions/:session_id/unread_message_count', SessionUnreadMessages: '/api/v2/sessions/:session_id/messages/unread', Participants: '/api/v2/sessions/:session_id/participants', ParticipantsAvatar: '/api/v2/sessions/:session_id/participants/avatars', Participant: '/api/v2/sessions/:session_id/participants/:participant_id', ParticipantAvatar: '/api/v2/session/:session_id/participants/:participant_id/avatars' }, Search: { } }; // 将API路径加上主机名称 (function regularEndpoints() { for (var catalog in ENDPOINTS) { for(var path in catalog){ ENDPOINTS.getProperty(catalog).setProperty(path, server + path); } } })(); var httpClient = { get: function (endpoint, data, successCallback, errorCallback) { $.ajax({ type: "get", url: endpoint, data: data, async: true, dataType: "json", success: function (data) { successCallback(data); }, error: function (message) { errorCallback(message); } }); }, post: function (endpoint, data, successCallback, errorCallback) { $.ajax({ type: "post", url: endpoint, data: data, async: true, dataType: "json", success: function (data) { successCallback(data); }, error: function (message) { errorCallback(message); } }); }, put: function (endpoint, data, successCallback, errorCallback) { $.ajax({ type: "put", url: endpoint, data: data, async: true, dataType: "json", success: function (data) { successCallback(data); }, error: function (message) { errorCallback(message); } }); }, delete: function (endpoint, data, successCallback, errorCallback) { $.ajax({ type: "delete", url: endpoint, data: data, async: true, dataType: "json", success: function (data) { successCallback(data); }, error: function (message) { errorCallback(message); } }); } }; var iChat = { Application: { // 获取应用角标数 getBadgeNo: function (userId, success, failure) { httpClient.get(ENDPOINTS.Application.BadgeNo, {user_id: userId}, success, failure); } }, Management: { health: function (success, failure) { httpClient.get(ENDPOINTS.Management.Health, {}, success, failure); } }, Users: { login: function (userId, token, client_id, platform, success, failure) { plus.storage.setItem(LocalStorageKey.userId, userId); httpClient.post(ENDPOINTS.Login, {user_id: userId, token: token, client_id: client_id, platform: platform}, success, failure); }, logout: function (userId, success, failure) { plus.storage.removeItem(LocalStorageKey.userId); httpClient.delete(ENDPOINTS.Logout, {user_id: userId}, success, failure); }, updateStatus: function (userId, status, success, failure) { httpClient.put(ENDPOINTS.UserStatus, {user_id: userId}, success, failure); $.ajax({ type: "get", url: ENDPOINTS.UserStatus.replace(':user_id', userId), data: {user_id: userId, status: status}, async: true, dataType: "json", success: function (data) { console.log(JSON.stringify(data)); }, error: function (msg) { } }); }, }, Sessions: { // 创建MUC会话 createMucSession: function (userId, peerId, success, failure) { httpClient.post(ENDPOINTS.Sessions, {session_type: 1, user_id: userId, peer_id: peerId}, success, failure); }, // 创建P2P会话 createP2pSession: function (userId, peerId, success, failure) { httpClient.post(ENDPOINTS.Sessions, {session_type: 2, user_id: userId, peer_id: peerId}, success, failure); }, // 获取与患者发生的会话,实际上这些是MUC会话 getSessionsWithPatient: function (userId, page, size, success, failure) { httpClient.get(ENDPOINTS.Sessions, {user_id: userId, session_type: "1", page: page, size: size}, success, failure); }, // 获取与医生相关的会话,实际上这些是P2P,群聊和讨论组 getSessionsWithDoctor: function (userId, page, size, success, failure) { httpClient.get(ENDPOINTS.Sessions, {user_id: userId, session_type: "2, 3", page: page, size: size}, success, failure); }, // 获取与患者的最近会话 getRecentSessionsWithPatient: function (userId, success, failure) { httpClient.get(ENDPOINTS.Sessions.RecentSessions, {session_type: 1, user_id: userId}, success, failure); }, // 获取与医生的最近会话,包括P2P、群聊与讨论组 getRecentSessionsWithDoctor: function (userId, success, failure) { httpClient.get(ENDPOINTS.Sessions.RecentSessions, {session_type: "2, 3", userId: userId}, success, failure); }, // 置顶会话 stickSession: function (userId, sessionId, success, failure) { httpClient.put(ENDPOINTS.Sessions.SessionSticky.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 取消会话置顶 unstickSession: function (userId, sessionId, success, failure) { httpClient.put(ENDPOINTS.Sessions.SessionSticky.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 获取所有咨询 getTopics: function (sessionId, success, failure) { httpClient.get(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId), {}, success, failure); }, // 创建咨询 createTopic: function (sessionId, userId, success, failure) { httpClient.post(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 结束咨询 endTopic: function (sessionId, userId, success, failure) { httpClient.put(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 咨询是否已结束 isTopicEnded: function (sessionId, topicId, success, failure) { httpClient.get(ENDPOINTS.Sessions.TopicEnded.replace(SessionPath, sessionId).replace(TopicPath, topicId), {}, success, failure); }, // 发送消息,不论是何种会话,均不需要指定会话对象是谁,只需要向会话本身发送消息即可 sendMessage: function (sessionId, userId, content, contentType, success, failure) { httpClient.post(ENDPOINTS.Sessions.Messages.replace(SessionPath, sessionId), {from: userId, content_type: contentType, content: content}, success, failure); }, // 按会话获取消息 getMessagesBySession: function (sessionId, startMessageId, count, success, failure) { httpClient.get(ENDPOINTS.Sessions.Messages.replace(SessionPath, sessionId), {start_message_id: startMessageId, count: count}, success, failure); }, // 按议题获取消息 getMessagesByTopic: function (sessionId, topicId, startMessageId, count, success, failure) { httpClient.get(ENDPOINTS.Sessions.MessagesByTopic.replace(SessionPath, sessionId), {start_message_id: startMessageId, count: count}, success, failure); }, // 获取所有会话的未读消息数 getAllSessionUnreadMessageCount: function (userId, success, failure) { httpClient.get(ENDPOINTS.Sessions.SessionsUnreadMessageCount, {user_id: userId}, success, failure); }, // 获取指定会话的未读消息数 getSessionUnreadMessageCount: function (sessionId, userId, success, failure) { httpClient.get(ENDPOINTS.Sessions.SessionUnreadMessageCount.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 获取指定会话的未读消息 getSessionUnreadMessages: function (sessionId, userId, count, success, failure) { httpClient.get(ENDPOINTS.Sessions.SessionUnreadMessages.replace(SessionPath, sessionId), {user_id: userId}, success, failure); }, // 添加会话成员 addParticipant: function (sessionId, participantId, success, failure) { httpClient.post(ENDPOINTS.Sessions.Participants.replace(SessionPath, sessionId), {participant_id: participantId}, success, failure); }, // 获取会话成员列表 getParticipants: function (sessionId, success, failure) { httpClient.get(ENDPOINTS.Sessions.Participants.replace(SessionPath, sessionId), {}, success, failure); }, // 移除会话成员 removeParticipant: function (sessionId, participantId, success, failure) { httpClient.delete(ENDPOINTS.Sessions.Participant.replace(SessionPath, sessionId).replace(ParticipantPath, participantId), {}, success, failure); }, // 获取会话成员头像 getParticipantAvatar: function (sessionId, participantId, success, failure) { httpClient.get(ENDPOINTS.Sessions.ParticipantAvatar.replace(SessionPath, sessionId).replace(ParticipantPath, participantId), {}, success, failure); } }, Search: {} }; /* 执行业务接口前,调用此函数判断当前用户是否在线。 */ function checkLogin(callback) { /*sendPost("/doctor/islive", {}, null, function (res) { if (res.status == 200) { callback(); } })*/ callback(); }