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.
    }
}
标签: ,

  1. 笑笑 | #1

    为什么

  2. 笑笑 | #2

    ;-) :| :x

  3. 笑笑 | #3

    快速

  4. 笑笑 | #4

    我要下载私聊房间

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
回到顶部