SFS 私聊跨房间私聊实现
在SmartFoxServer里
SmartFoxServer::sendPrivateMessage(message:String, recipientId:int, roomId:int):void
/**
* @param message <strong> String </strong> 接收到的消息
* @param sender <strong> User </strong> 发送者的 User 实例, 如果不在同一个房间则为null
* @param userId <strong> int </strong> 发送者的 userId
* @param roomId <strong> int </strong> 消息来源的房间id
*/
SFSEvent.onPrivateMessage
[ RECEIVED ]: <![CDATA[这是一条私聊消息!]]>, (len: 102)
如果仅在同一个房间内发送私聊信息,那么SmarteFoxServer 的私聊机制足以够用。
但如果发送者和接收者不在同一个房间,那么我们只能得到发送者id,发送者名字怎么获得呢?
首先我们会遍历roomList和userList,可是我们会发现,根本就没有这个id的用户。
那么我们舍弃SmartFoxServer的私聊机制,利用扩展实现私聊。
服务器端处理代码:
function handleRequest(cmd, params, user, fromRoom)
{
// 扩展名
var response = { extName:"zoneChat", _cmd:cmd };
if ("priv" == cmd)
{
response.senderName = user.getName();
response.senderId = user.getUserId();
response.roomId = fromRoom;
response.msg = params.msg;
_server.sendResponse(response, -1, null, [_server.getUserById(params.uid)]);
}
else trace("it is error:zoneChat, cmd = " + cmd);
}
客服端代码:
/**
* 发送私聊消息
*
* @param recipientId <strong> int </strong> 接收者id
* @param msg <strong> String </strong> 私聊信息
* @param roomId <strong> int </strong>
*/
private function sendPrivateMsg(recipientId:int, msg:String, roomId:int = -1):void
{
smartFoxServer.sendExtMessage("chatZone", "priv", { uid:recipientId, msg:msg }, "json", roomId);
}
/**
* 接收到扩展回应
*
* @param event
*/
private function extensionResponseHandler(event:SFSEvent):void
{
var type:String = event.params.type;
var dataObj:Object = event.params.dataObj;
var cmd:String = dataObj._cmd;
// 接收到私聊信息
if ("priv" = cmd)
{
// 获取到传来的信息
var msg:String = dataObj.msg;
var senderName:String = dataObj.senderName;
var senderId:int = dataObj.senderId;
// to-do your code.
}
}
» 转载请注明来源:www.litefeel.com » 《SFS 私聊跨房间私聊实现》
» 本文链接地址:https://www.litefeel.com/sfs-cross-room-private-chat/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/sfs-cross-room-private-chat/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
为什么
;-) :| :x
快速
我要下载私聊房间