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);
});
}
}
}