im.client.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. /**
  2. * IM客户端SDK。此SDK可以连接开发、测试或生产环境,根据需要配置环境参数以连接到不同的服务器。
  3. */
  4. // 本地临时缓存Key
  5. var LocalStorageKey = {
  6. userId: "im_userid"
  7. };
  8. // 服务器
  9. var server = "http://127.0.0.1:3008";
  10. // 资源实体在URL中的占位符
  11. var UserPath = ":user_id";
  12. var SessionPath = ":session_id";
  13. var TopicPath = ":topic+id";
  14. var ParticipantPath = ":participant_id";
  15. // REST API
  16. var ENDPOINTS = {
  17. Application: {
  18. BadgeNo: '/api/v2/application/badge_no'
  19. },
  20. Management: {
  21. Health: '/api/v2/management/health',
  22. DbStatus: '/db'
  23. },
  24. Users: {
  25. Login: '/api/v2/users/login',
  26. Logout: '/api/v2/users/logout',
  27. User: '/api/v2/users/:user_id',
  28. UserStatus: '/api/v2/users/:user_id/status'
  29. },
  30. Sessions: {
  31. Session: '/api/v2/sessions/:session_id',
  32. SessionSticky: '/api/v2/sessions/:session_id/sticky',
  33. RecentSessions: '/api/v2/sessions/recent',
  34. Topics: '/api/v2/sessions/:session_id/topics',
  35. Topic: '/api/v2/sessions/:session_id/topics/:topic_id',
  36. TopicEnded: '/api/v2/sessions/:session_id/topics/:topic_id/ended',
  37. Messages: '/api/v2/sessions/:session_id/messages',
  38. MessagesByTopic: '/api/v2/sessions/:session_id/topics/:topic_id/messages',
  39. Message: '/api/v2/sessions/:session_id/messages/:message_id',
  40. SessionsUnreadMessageCount: '/api/v2/sessions/unread_message_count',
  41. SessionUnreadMessageCount: '/api/v2/sessions/:session_id/unread_message_count',
  42. SessionUnreadMessages: '/api/v2/sessions/:session_id/messages/unread',
  43. Participants: '/api/v2/sessions/:session_id/participants',
  44. ParticipantsAvatar: '/api/v2/sessions/:session_id/participants/avatars',
  45. Participant: '/api/v2/sessions/:session_id/participants/:participant_id',
  46. ParticipantAvatar: '/api/v2/session/:session_id/participants/:participant_id/avatars'
  47. },
  48. Search: {
  49. }
  50. };
  51. // 将API路径加上主机名称
  52. (function regularEndpoints() {
  53. for (var catalog in ENDPOINTS) {
  54. for(var path in catalog){
  55. ENDPOINTS.getProperty(catalog).setProperty(path, server + path);
  56. }
  57. }
  58. })();
  59. var httpClient = {
  60. get: function (endpoint, data, successCallback, errorCallback) {
  61. $.ajax({
  62. type: "get",
  63. url: endpoint,
  64. data: data,
  65. async: true,
  66. dataType: "json",
  67. success: function (data) {
  68. successCallback(data);
  69. },
  70. error: function (message) {
  71. errorCallback(message);
  72. }
  73. });
  74. },
  75. post: function (endpoint, data, successCallback, errorCallback) {
  76. $.ajax({
  77. type: "post",
  78. url: endpoint,
  79. data: data,
  80. async: true,
  81. dataType: "json",
  82. success: function (data) {
  83. successCallback(data);
  84. },
  85. error: function (message) {
  86. errorCallback(message);
  87. }
  88. });
  89. },
  90. put: function (endpoint, data, successCallback, errorCallback) {
  91. $.ajax({
  92. type: "put",
  93. url: endpoint,
  94. data: data,
  95. async: true,
  96. dataType: "json",
  97. success: function (data) {
  98. successCallback(data);
  99. },
  100. error: function (message) {
  101. errorCallback(message);
  102. }
  103. });
  104. },
  105. delete: function (endpoint, data, successCallback, errorCallback) {
  106. $.ajax({
  107. type: "delete",
  108. url: endpoint,
  109. data: data,
  110. async: true,
  111. dataType: "json",
  112. success: function (data) {
  113. successCallback(data);
  114. },
  115. error: function (message) {
  116. errorCallback(message);
  117. }
  118. });
  119. }
  120. };
  121. var iChat = {
  122. Application: {
  123. // 获取应用角标数
  124. getBadgeNo: function (userId, success, failure) {
  125. httpClient.get(ENDPOINTS.Application.BadgeNo,
  126. {user_id: userId},
  127. success,
  128. failure);
  129. }
  130. },
  131. Management: {
  132. health: function (success, failure) {
  133. httpClient.get(ENDPOINTS.Management.Health,
  134. {},
  135. success,
  136. failure);
  137. }
  138. },
  139. Users: {
  140. login: function (userId, token, client_id, platform, success, failure) {
  141. plus.storage.setItem(LocalStorageKey.userId, userId);
  142. httpClient.post(ENDPOINTS.Login,
  143. {user_id: userId, token: token, client_id: client_id, platform: platform},
  144. success,
  145. failure);
  146. },
  147. logout: function (userId, success, failure) {
  148. plus.storage.removeItem(LocalStorageKey.userId);
  149. httpClient.delete(ENDPOINTS.Logout,
  150. {user_id: userId},
  151. success,
  152. failure);
  153. },
  154. updateStatus: function (userId, status, success, failure) {
  155. httpClient.put(ENDPOINTS.UserStatus,
  156. {user_id: userId},
  157. success,
  158. failure);
  159. $.ajax({
  160. type: "get",
  161. url: ENDPOINTS.UserStatus.replace(':user_id', userId),
  162. data: {user_id: userId, status: status},
  163. async: true,
  164. dataType: "json",
  165. success: function (data) {
  166. console.log(JSON.stringify(data));
  167. },
  168. error: function (msg) {
  169. }
  170. });
  171. },
  172. },
  173. Sessions: {
  174. // 创建MUC会话
  175. createMucSession: function (userId, peerId, success, failure) {
  176. httpClient.post(ENDPOINTS.Sessions,
  177. {session_type: 1, user_id: userId, peer_id: peerId},
  178. success,
  179. failure);
  180. },
  181. // 创建P2P会话
  182. createP2pSession: function (userId, peerId, success, failure) {
  183. httpClient.post(ENDPOINTS.Sessions,
  184. {session_type: 2, user_id: userId, peer_id: peerId},
  185. success,
  186. failure);
  187. },
  188. // 获取与患者发生的会话,实际上这些是MUC会话
  189. getSessionsWithPatient: function (userId, page, size, success, failure) {
  190. httpClient.get(ENDPOINTS.Sessions,
  191. {user_id: userId, session_type: "1", page: page, size: size},
  192. success,
  193. failure);
  194. },
  195. // 获取与医生相关的会话,实际上这些是P2P,群聊和讨论组
  196. getSessionsWithDoctor: function (userId, page, size, success, failure) {
  197. httpClient.get(ENDPOINTS.Sessions,
  198. {user_id: userId, session_type: "2, 3", page: page, size: size},
  199. success,
  200. failure);
  201. },
  202. // 获取与患者的最近会话
  203. getRecentSessionsWithPatient: function (userId, success, failure) {
  204. httpClient.get(ENDPOINTS.Sessions.RecentSessions,
  205. {session_type: 1, user_id: userId},
  206. success,
  207. failure);
  208. },
  209. // 获取与医生的最近会话,包括P2P、群聊与讨论组
  210. getRecentSessionsWithDoctor: function (userId, success, failure) {
  211. httpClient.get(ENDPOINTS.Sessions.RecentSessions,
  212. {session_type: "2, 3", userId: userId},
  213. success,
  214. failure);
  215. },
  216. // 置顶会话
  217. stickSession: function (userId, sessionId, success, failure) {
  218. httpClient.put(ENDPOINTS.Sessions.SessionSticky.replace(SessionPath, sessionId),
  219. {user_id: userId},
  220. success,
  221. failure);
  222. },
  223. // 取消会话置顶
  224. unstickSession: function (userId, sessionId, success, failure) {
  225. httpClient.put(ENDPOINTS.Sessions.SessionSticky.replace(SessionPath, sessionId),
  226. {user_id: userId},
  227. success,
  228. failure);
  229. },
  230. // 获取所有咨询
  231. getTopics: function (sessionId, success, failure) {
  232. httpClient.get(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId),
  233. {},
  234. success,
  235. failure);
  236. },
  237. // 创建咨询
  238. createTopic: function (sessionId, userId, success, failure) {
  239. httpClient.post(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId),
  240. {user_id: userId},
  241. success,
  242. failure);
  243. },
  244. // 结束咨询
  245. endTopic: function (sessionId, userId, success, failure) {
  246. httpClient.put(ENDPOINTS.Sessions.Topics.replace(SessionPath, sessionId),
  247. {user_id: userId},
  248. success,
  249. failure);
  250. },
  251. // 咨询是否已结束
  252. isTopicEnded: function (sessionId, topicId, success, failure) {
  253. httpClient.get(ENDPOINTS.Sessions.TopicEnded.replace(SessionPath, sessionId).replace(TopicPath, topicId),
  254. {},
  255. success,
  256. failure);
  257. },
  258. // 发送消息,不论是何种会话,均不需要指定会话对象是谁,只需要向会话本身发送消息即可
  259. sendMessage: function (sessionId, userId, content, contentType, success, failure) {
  260. httpClient.post(ENDPOINTS.Sessions.Messages.replace(SessionPath, sessionId),
  261. {from: userId, content_type: contentType, content: content},
  262. success,
  263. failure);
  264. },
  265. // 按会话获取消息
  266. getMessagesBySession: function (sessionId, startMessageId, count, success, failure) {
  267. httpClient.get(ENDPOINTS.Sessions.Messages.replace(SessionPath, sessionId),
  268. {start_message_id: startMessageId, count: count},
  269. success,
  270. failure);
  271. },
  272. // 按议题获取消息
  273. getMessagesByTopic: function (sessionId, topicId, startMessageId, count, success, failure) {
  274. httpClient.get(ENDPOINTS.Sessions.MessagesByTopic.replace(SessionPath, sessionId),
  275. {start_message_id: startMessageId, count: count},
  276. success,
  277. failure);
  278. },
  279. // 获取所有会话的未读消息数
  280. getAllSessionUnreadMessageCount: function (userId, success, failure) {
  281. httpClient.get(ENDPOINTS.Sessions.SessionsUnreadMessageCount,
  282. {user_id: userId},
  283. success,
  284. failure);
  285. },
  286. // 获取指定会话的未读消息数
  287. getSessionUnreadMessageCount: function (sessionId, userId, success, failure) {
  288. httpClient.get(ENDPOINTS.Sessions.SessionUnreadMessageCount.replace(SessionPath, sessionId),
  289. {user_id: userId},
  290. success,
  291. failure);
  292. },
  293. // 获取指定会话的未读消息
  294. getSessionUnreadMessages: function (sessionId, userId, count, success, failure) {
  295. httpClient.get(ENDPOINTS.Sessions.SessionUnreadMessages.replace(SessionPath, sessionId),
  296. {user_id: userId},
  297. success,
  298. failure);
  299. },
  300. // 添加会话成员
  301. addParticipant: function (sessionId, participantId, success, failure) {
  302. httpClient.post(ENDPOINTS.Sessions.Participants.replace(SessionPath, sessionId),
  303. {participant_id: participantId},
  304. success,
  305. failure);
  306. },
  307. // 获取会话成员列表
  308. getParticipants: function (sessionId, success, failure) {
  309. httpClient.get(ENDPOINTS.Sessions.Participants.replace(SessionPath, sessionId),
  310. {},
  311. success,
  312. failure);
  313. },
  314. // 移除会话成员
  315. removeParticipant: function (sessionId, participantId, success, failure) {
  316. httpClient.delete(ENDPOINTS.Sessions.Participant.replace(SessionPath, sessionId).replace(ParticipantPath, participantId),
  317. {},
  318. success,
  319. failure);
  320. },
  321. // 获取会话成员头像
  322. getParticipantAvatar: function (sessionId, participantId, success, failure) {
  323. httpClient.get(ENDPOINTS.Sessions.ParticipantAvatar.replace(SessionPath, sessionId).replace(ParticipantPath, participantId),
  324. {},
  325. success,
  326. failure);
  327. }
  328. },
  329. Search: {}
  330. };
  331. /*
  332. 执行业务接口前,调用此函数判断当前用户是否在线。
  333. */
  334. function checkLogin(callback) {
  335. /*sendPost("/doctor/islive", {}, null, function (res) {
  336. if (res.status == 200) {
  337. callback();
  338. }
  339. })*/
  340. callback();
  341. }