简介

本Demo演示了J-SDK所有API的调用方法,包括有点对点消息、发布订阅主题消息、群消息、文件传输等功能。

 

应用实例

 

1. 创建et_cloud对象实例

  • 使用SDK的API之前,需要创建一个ET-iLink的et_cloud对象实例。
/**
* etCloud sdk 的et_cloud对象
* */
var etCloud = null;

/**
* loginUid 登陆uid
* 请更改并填写你获得的 UID
* */
var loginUid = 'Fc5wGsTuvumomVom3wgZTKoVHg9f2wbj3M';

/**
* otherUid 接收方uid
* 请更改并填写你获得的 UID
* */
var receiverUid = 'Fc5wGsTuvumvyVvy5TTVNABmpJVcktAC9R';

/**
* appkey 登陆用appkey
* 请更改并填写你获得的 APPKEY
* */
var appkey = '9f3ef380-a510-632558';

/**
* secretkey 登陆用secretkey
* 请更改并填写你获得的 secretkey
* */
var secretkey = 'db06c78d1e24cf708a14ce81c9b617ec';

/**
* balanceServer 登陆用
* 请更改为你的服务器地址和端口 SERVER PORT
* */
var balanceServer = 'ws://lb.kaifakuai.com:1885';

/**
* 设置配置参数
* */
var config = {
	userid: loginUid,
	appkey: appkey,
	secretkey: secretkey,
	server:balanceServer,

	/**
	* 0:表示支持旧版本的lb协议,
	* 1:表示支持新版本的lb协议。
	* */
	protocolVer:1
};

/**
* new et_cloud
* 创建 et_cloud对象
*/
etCloud = new et_cloud(config);

 

2. 设置回调

  • 使用JSDK用户需要实现IM消息事件回调及文件消息事件回调,通过回调接口处理SDK消息及事件,设置回调在创建et_cloud对象实例之后进行。
/**
* 设置回调参数
* */
var config = {
	/**
	* 设置IM回调
	* */
	imCallBack: onImEvent,

	/**
	* 设置File回调
	* */
	fileCallBack: onFileEvent
};

etCloud.etSetCallBack(config);

//发现服务器, 发现超时设置20s
etCloud.etDiscoverServers({timeout:20});

 

3. 注册用户UID

  • 默认情况下,用户申请到appkey和secretkey是没有UID的,用户需要调用API接口注册生成第一个用户UID。
/**
* appkey 登陆用appkey
* 请更改并填写你获得的 APPKEY
* */
var appkey = '9f3ef380-a510-632558';

/**
* secretkey 登陆用secretkey
* 请更改并填写你获得的 secretkey
* */
var secretkey = 'db06c78d1e24cf708a14ce81c9b617ec';

/**
* balanceServer 登陆用
* 请更改为你的服务器地址和端口 SERVER PORT
* */
var balanceServer = 'ws://lb.kaifakuai.com:1885';

var config = {
	appkey: appkey,
	secretkey: secretkey,
	server:balanceServer,
	protocolVer:1 //0:表示支持旧版本的lb协议,1:表示支持新版本的lb协议。
};
var ilink = new et_cloud(config);

var opt1={
	"username":"李四",
	"nickname":"四哥"
};
ilink.etAddUser(opt1 ,function(data,status){
	appendLog(data);
	var dataObj = $.parseJSON(data);
	if(dataObj.ret == 0){
		appendLog('注册用户成功!');
		document.getElementById('buddyid_ipt').value = dataObj.user[0].userid;
		document.getElementById('idlist_ipt').value = document.getElementById('idlist_ipt').value == '' ? dataObj.user[0].userid : document.getElementById('idlist_ipt').value + ',' + dataObj.user[0].userid;
		document.getElementById('idlist1_ipt').value = document.getElementById('idlist1_ipt').value == '' ? dataObj.user[0].userid : document.getElementById('idlist1_ipt').value + ',' + dataObj.user[0].userid;
	}
});

 

4. 搜索服务器

  • 使用JSDK用户需要需要搜索ilink登陆服务的地址

	//搜索服务器, 搜索超时设置20s
	etCloud.etDiscoverServers({timeout:20});

 

5. 连接服务器

  • ET-iLink实例创建成功后,将得到一个et_cloud对象,使用该对象用户可调用登录API连接ET-iLink服务器。

var opt = {
	/**
	* server
	* etDiscoverServers接口调用得到的对象
	* 在onImEvent的DISCOVER_SUCCESS事件获取
	* */
	server:server,

	keepAliveInterval:60,
	timeout:30,
	/**
	* false, 保留离线消息
	* true,清楚离线消息
	* */
	clean:false
};
etCloud.etConnect(opt);
  • 连接成功后将触发connect类型事件;退出登录或连接被动断开后将触发close类型事件,用户可以根据需要在此事件中进行重连;我们向回调imCallBack onImEvent()中增加下列代码:
/* *
* intervalId 重连定时
* */
var intervalId = null;

/* *
* isNeedRelogin 需要重连标识
* */
var isNeedRelogin = true;

/**
* 重连函数,没十秒尝试一次连接
* */
function reConnect(){
	intervalId = setInterval(function(){
		if(etCloud.checkIsConnected()){
			//已登录不用再重登
			clearInterval(intervalId);
			intervalId = null;
		}
		else {
			etCloud.etReConnect();
			console.log("reConnect " + intervalId);
		}
	},30000);
}

/**
* onImEvent
* IM消息的回调函数
*/
function onImEvent(event) {
	if(event.type === 'connect'){
		//登陆成功事件
		appendLog(event.type);

		isNeedRelogin = true;
	}
	else if(event.type === 'close') {
		appendLog(event.type);

		/**
		* 需要重连时调用下面代码重连
		* */
		if(intervalId == null && isNeedRelogin == true){
			reConnect();
		}
	}
	else{
		appendLog(event.type);
	}
}

 

6. 点对点消息收发

  • 发送点对点消息
    • 连接成功后用户可调用etChatTo(opt,callback)接口进行点对点消息收发,所有消息接口均为异步接口,接口调用完成表明消息入 发送队列成功,实际消息发送成功还是失败在接口回调函数callback中通知。看以下示例:
/**
* otherUid 接收方uid
* 请更改并填写你获得的 UID
* */
var receiverUid = 'Fc5wGsTuvumvyVvy5TTVNABmpJVcktAC9R';
var opt = {
	userid:receiverUid,
	message:"hello"
};

etCloud.etChatTo(opt,function(error){
	if(error){
		//消息发送失败
		appendLog(opt.message + " send error!!!");
		return;
	}
	//消息发送成功
	appendLog("chat to " + opt.userid + ' : ' + opt.message);
});
  • 接收点对点消息
    • 有其他用户向本机发送消息时,将在回调imCallBack onImEvent()中得到通知,我们向消息回调中添加如下代码
/**
* onImEvent
* IM消息的回调函数
*/
function onImEvent(event) {
	if (event.type === 'message') {
		//点对点消息响应
		if (event.topic === 'chat' || event.topic === 'chat_ex') {
			appendLog('receive ' +  event.topic + ' message from ' + event.from_userid + ' : ' + event.message);
		}
	}
}

 

7. 断开服务器连接

etCloud.etDisconnect();