var config; var pomelo; var username: string = ""; var password: string = ""; module ChatServer { interface IDictionary { [k: string]: string; } interface IAuthenData { userId: string; token: string; } class AuthenData implements IAuthenData { userId: string; token: string; } export class ServerImplemented { private static Instance: ServerImplemented; public static getInstance(): ServerImplemented { if (this.Instance === null || this.Instance === undefined) { this.Instance = new ServerImplemented(); } return this.Instance; } static connectionProblemString: string = 'Server connection is unstable.'; host: string; port: number; authenData: AuthenData; appConfig: any; _isConnected = false; _isLogedin = false; socketComponent: SocketComponent; public setSocketComponent(socket: SocketComponent) { this.socketComponent = socket; } constructor() { console.warn("serv imp. constructor"); } public getClient() { var self = this; if (pomelo !== null) { return pomelo; } else { console.warn("disconnect Event"); } } public dispose() { console.warn("dispose socket client."); this.disConnect(); this.authenData = null; } public disConnect() { console.log('disconnecting...'); if (!!pomelo) { pomelo.removeAllListeners(); pomelo.disconnect(); pomelo = null; } } public logout(registrationId) { let msg: IDictionary = {}; msg["username"] = username; msg["registrationId"] = registrationId; if (pomelo != null) pomelo.notify("connector.entryHandler.logout", msg); this.disConnect(); } public init(callback: (err, res) => void) { console.log('serverImp.init()'); var self = this; this._isConnected = false; this.authenData = new AuthenData(); let pro = new Promise(function (resolve, rejected) { self.loadSocket(resolve, rejected); }).then(function onfulfilled(value) { self.loadConfig(callback); }).catch(function onRejected(err) { console.error(err); }); } private loadSocket(resolve, rejected) { try { pomelo = require("./js/pomelo/pomeloclient"); resolve(pomelo); } catch(e) { require(["../js/pomelo-web/pomelo"], (value) => { pomelo = value; resolve(pomelo); }); } } private loadConfig(callback: (err, res) => void) { this.appConfig = JSON.parse(config); this.host = this.appConfig.socketHost; this.port = this.appConfig.socketPort; if (!!pomelo) { // public UpdateUserProfile(myId: string, profileFields: { [k: string]: string }, callback: (err, res) => void) { profileFields["token"] = this.authenData.token; profileFields["_id"] = myId; pomelo.request("auth.profileHandler.profileUpdate", profileFields, (result) => { if (callback != null) { callback(null, result); } }); } public ProfileImageChanged(userId: string, path: string, callback: (err, res) => void) { var msg: { [k: string]: string } = {}; msg["token"] = this.authenData.token; msg["userId"] = userId; msg["path"] = path; pomelo.request("auth.profileHandler.profileImageChanged", msg, (result) => { if (callback != null) { callback(null, result); } }); } public getLastAccessRoomsInfo(sessionToken: string = "", callback: Function) { var msg: IDictionary = {}; msg["token"] = sessionToken; // /////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// /// Gets the public group chat rooms. /// Beware for data loading so mush. please load from cache before load from server. /// /// Callback. public getPrivateGroups(callback: (err, res) => void) { var msg: IDictionary = {}; msg["token"] = this.authenData.token; pomelo.request("connector.entryHandler.getMyPrivateGroupChat", msg, (result) => { console.log("getPrivateGroups: " + JSON.stringify(result)); if (callback != null) { callback(null, result); } }); } public UserRequestCreateGroupChat(groupName: string, memberIds: string[], callback: (err, res) => void) { var msg: IDictionary = {}; msg["token"] = this.authenData.token; msg["groupName"] = groupName; msg["memberIds"] = JSON.stringify(memberIds); pomelo.request("chat.chatRoomHandler.userCreateGroupChat", msg, (result) => { console.log("RequestCreateGroupChat", JSON.stringify(result)); if (callback != null) callback(null, result); }); } public UpdatedGroupImage(groupId: string, path: string, callback: (err, res) => void) { var msg: IDictionary = {}; msg["token"] = this.authenData.token; msg["groupId"] = groupId; msg["path"] = path; pomelo.request("chat.chatRoomHandler.updateGroupImage", msg, (result) => { console.log("UpdatedGroupImage", JSON.stringify(result)); if (callback != null) { callback(null, result); } }); } public editGroupMembers(editType: string, roomId: string, roomType: RoomType, members: string[], callback: (err, res) => void) { if (editType == null || editType.length === 0) return; if (roomId == null || roomId.length === 0) return; if (roomType === null) return; if (members == null || members.length === 0) return; var msg: IDictionary = {}; msg["token"] = this.authenData.token; msg["editType"] = editType; msg["roomId"] = roomId; msg["roomType"] = roomType.toString(); msg["members"] = JSON.stringify(members); pomelo.request("chat.chatRoomHandler.editGroupMembers", msg, (result) => { console.log("editGroupMembers response." + result.toString()); if (callback != null) { callback(null, result); } }); } public editGroupName(roomId: string, roomType: RoomType, newGroupName: string, callback: (err, res) => void) { if (roomId == null || roomId.length === 0) return; if (roomType === null) return; if (newGroupName == null || newGroupName.length === 0) return; var msg: IDictionary = {}; msg["token"] = this.authenData.token; msg["roomId"] = roomId; msg["roomType"] = roomType.toString(); msg["newGroupName"] = newGroupName; pomelo.request("chat.chatRoomHandler.editGroupName", msg, (result) => { console.log("editGroupName response." + result.toString()); if (callback != null) { callback(null, result); } }); } /// /// Gets Private Chat Room. /// /// My identifier. /// My roommate identifier. public getPrivateChatRoomId(myId: string, myRoommateId: string, callback: (err, res) => void) { var msg: IDictionary = {}; msg["token"] = this.authenData.token; msg["ownerId"] = myId; msg["roommateId"] = myRoommateId; pomelo.request("chat.chatRoomHandler.getRoomById", msg, (result) => { if (callback != null) { callback(null, result); } }); } // public static ON_ACCESS_ROOMS: string = "onAccessRooms"; public static ON_ADD_ROOM_ACCESS: string = "onAddRoomAccess"; public static ON_UPDATED_LASTACCESSTIME: string = "onUpdatedLastAccessTime"; // public static ON_CREATE_GROUP_SUCCESS: string = "onCreateGroupSuccess"; public static ON_EDITED_GROUP_MEMBER: string = "onEditGroupMembers"; public static ON_EDITED_GROUP_NAME: string = "onEditGroupName"; public static ON_EDITED_GROUP_IMAGE: string = "onEditGroupImage"; public static ON_NEW_GROUP_CREATED: string = "onNewGroupCreated"; public static ON_UPDATE_MEMBER_INFO_IN_PROJECTBASE: string = "onUpdateMemberInfoInProjectBase"; // public static ON_USER_LOGIN: string = "onUserLogin"; public static ON_USER_UPDATE_IMAGE_PROFILE: string = "onUserUpdateImgProfile"; public static ON_USER_UPDATE_PROFILE: string = "onUserUpdateProfile"; // public static ON_GET_ME: string = "onGetMe"; public static ON_GET_COMPANY_INFO: string = "onGetCompanyInfo"; public static ON_GET_COMPANY_MEMBERS: string = "onGetCompanyMembers"; public static ON_GET_PRIVATE_GROUPS: string = "onGetPrivateGroups"; public static ON_GET_ORGANIZE_GROUPS: string = "onGetOrganizeGroups"; public static ON_GET_PROJECT_BASE_GROUPS: string = "onGetProjectBaseGroups"; private chatServerListener: absSpartan.IChatServerListener; private frontendListener: absSpartan.IFrontendServerListener; private rtcCallListener: absSpartan.IRTCListener; private serverListener: absSpartan.IServerListener; public addFrontendListener(obj: absSpartan.IFrontendServerListener): void { this.frontendListener = obj; } public addServerListener(obj: absSpartan.IServerListener): void { this.serverListener = obj; } public addChatListener(obj: absSpartan.IChatServerListener): void { this.chatServerListener = obj; } public addRTCListener(obj: absSpartan.IRTCListener): void { this.rtcCallListener = obj; } constructor() { } public addListenner(resolve, rejected) { this.callFrontendServer(); this.callChatServer(); this.callRTCEvents(); this.callServerEvents(); resolve(); } private callFrontendServer() { let self = this; pomelo.on(ServerEventListener.ON_GET_ME, function (data) { console.log(ServerEventListener.ON_GET_ME); self.frontendListener.onGetMe(data); }); pomelo.on(ServerEventListener.ON_GET_COMPANY_INFO, function (data) { console.log(ServerEventListener.ON_GET_COMPANY_INFO, JSON.stringify(data)); self.frontendListener.onGetCompanyInfo(data); }); //wait message from the server. pomelo.on(ServerEventListener.ON_GET_ORGANIZE_GROUPS, function (data) { console.log(ServerEventListener.ON_GET_ORGANIZE_GROUPS); self.frontendListener.onGetOrganizeGroupsComplete(data); }); pomelo.on(ServerEventListener.ON_GET_COMPANY_MEMBERS, data => { console.log(ServerEventListener.ON_GET_COMPANY_MEMBERS); self.frontendListener.onGetCompanyMemberComplete(data); }); pomelo.on(ServerEventListener.ON_GET_PRIVATE_GROUPS, data => { console.log(ServerEventListener.ON_GET_PRIVATE_GROUPS); self.frontendListener.onGetPrivateGroupsComplete(data); }); pomelo.on(ServerEventListener.ON_GET_PROJECT_BASE_GROUPS, data => { console.log(ServerEventListener.ON_GET_PROJECT_BASE_GROUPS); self.frontendListener.onGetProjectBaseGroupsComplete(data); }); } private callChatServer() { let self = this; pomelo.on(ServerEventListener.ON_CHAT, function (data) { console.log(ServerEventListener.ON_CHAT, JSON.stringify(data)); self.chatServerListener.onChat(data); }); //pomelo.on(ServerEventListener.ON_ADD, (data) => { // console.log(ServerEventListener.ON_ADD, data); // self.onChatListener.on(data); //}); pomelo.on(ServerEventListener.ON_LEAVE, (data) => { console.log(ServerEventListener.ON_LEAVE, JSON.stringify(data)); self.chatServerListener.onLeaveRoom(data); }); pomelo.on(ServerEventListener.ON_MESSAGE_READ, (data) => { // console.log(ServerEventListener.ON_MESSAGE_READ); self.chatServerListener.onMessageRead(data); }); pomelo.on(ServerEventListener.ON_GET_MESSAGES_READERS, (data) => { // console.log(ServerEventListener.ON_GET_MESSAGES_READERS); self.chatServerListener.onGetMessagesReaders(data); }); } private callRTCEvents() { var self = this; pomelo.on(ServerEventListener.ON_VIDEO_CALL, (data) => { console.log(ServerEventListener.ON_VIDEO_CALL, JSON.stringify(data)); self.rtcCallListener.onVideoCall(data); }); pomelo.on(ServerEventListener.ON_VOICE_CALL, (data) => { console.log(ServerEventListener.ON_VOICE_CALL, JSON.stringify(data)); self.rtcCallListener.onVoiceCall(data); }); pomelo.on(ServerEventListener.ON_HANGUP_CALL, (data) => { console.log(ServerEventListener.ON_HANGUP_CALL, JSON.stringify(data)); self.rtcCallListener.onHangupCall(data); }); pomelo.on(ServerEventListener.ON_THE_LINE_IS_BUSY, (data) => { console.log(ServerEventListener.ON_THE_LINE_IS_BUSY, JSON.stringify(data)); self.rtcCallListener.onTheLineIsBusy(data); }); } private callServerEvents() { var self = this; // pomelo.on(ServerEventListener.ON_ACCESS_ROOMS, (data) => { console.log(ServerEventListener.ON_ACCESS_ROOMS); self.serverListener.onAccessRoom(data); }); pomelo.on(ServerEventListener.ON_ADD_ROOM_ACCESS, (data) => { console.log(ServerEventListener.ON_ADD_ROOM_ACCESS); self.serverListener.onAddRoomAccess(data); }); pomelo.on(ServerEventListener.ON_UPDATED_LASTACCESSTIME, (data) => { console.log(ServerEventListener.ON_UPDATED_LASTACCESSTIME); self.serverListener.onUpdatedLastAccessTime(data); }); // pomelo.on(ServerEventListener.ON_USER_LOGIN, data => { console.log(ServerEventListener.ON_USER_LOGIN); self.serverListener.onUserLogin(data); }); pomelo.on(ServerEventListener.ON_USER_UPDATE_PROFILE, (data) => { console.log(ServerEventListener.ON_USER_UPDATE_PROFILE); self.serverListener.onUserUpdateProfile(data); }); pomelo.on(ServerEventListener.ON_USER_UPDATE_IMAGE_PROFILE, (data) => { console.log(ServerEventListener.ON_USER_UPDATE_IMAGE_PROFILE); self.serverListener.onUserUpdateImageProfile(data); }); // pomelo.on(ServerEventListener.ON_CREATE_GROUP_SUCCESS, (data) => { console.log(ServerEventListener.ON_CREATE_GROUP_SUCCESS); self.serverListener.onCreateGroupSuccess(data); }); pomelo.on(ServerEventListener.ON_EDITED_GROUP_MEMBER, (data) => { console.log(ServerEventListener.ON_EDITED_GROUP_MEMBER); self.serverListener.onEditedGroupMember(data); }); pomelo.on(ServerEventListener.ON_EDITED_GROUP_NAME, (data) => { console.log(ServerEventListener.ON_EDITED_GROUP_NAME); self.serverListener.onEditedGroupName(data); }); pomelo.on(ServerEventListener.ON_EDITED_GROUP_IMAGE, (data) => { console.log(ServerEventListener.ON_EDITED_GROUP_IMAGE); self.serverListener.onEditedGroupImage(data); }); pomelo.on(ServerEventListener.ON_NEW_GROUP_CREATED, (data) => { console.log(ServerEventListener.ON_NEW_GROUP_CREATED); self.serverListener.onNewGroupCreated(data); }); pomelo.on(ServerEventListener.ON_UPDATE_MEMBER_INFO_IN_PROJECTBASE, (data) => { console.log(ServerEventListener.ON_UPDATE_MEMBER_INFO_IN_PROJECTBASE); self.serverListener.onUpdateMemberInfoInProjectBase(data); }); } } }