SmartFoxServer Basic 用户请假错误

Posted

技术标签:

【中文标题】SmartFoxServer Basic 用户请假错误【英文标题】:SmartFoxServer Basic user leaveRoom error 【发布时间】:2015-08-31 03:29:33 【问题描述】:

用户 1 从 Flash 打开应用程序,用户 2 从浏览器打开应用程序

用户 1 创建房间 A 用户 2 加入房间 A 用户 2 退出房间 A

...我收到此错误:

[ RECEIVED ]: <msg t='sys'><body action='uCount' r='2' u='1'></body></msg>, (len: 60) [ RECEIVED ]: <msg t='sys'><body action='userGone' r='89'><user id='91' />, (len: 73) TypeError: Error #1009: Cannot access a property or method of a null object reference. at it.gotoandplay.smartfoxserver.handlers::SysHandler/handleUserLeaveRoom()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:353] at Function/@987654321@ at it.gotoandplay.smartfoxserver.handlers::SysHandler/handleMessage()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/handlers/SysHandler.as:84] at it.gotoandplay.smartfoxserver::SmartFoxClient/xmlReceived()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:327] at it.gotoandplay.smartfoxserver::SmartFoxClient/handleMessage()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1418] at it.gotoandplay.smartfoxserver::SmartFoxClient/handleSocketData()[/Users/Lapo/Documents/Flex Builder 2/SmartFoxClient_AS3/src/it/gotoandplay/smartfoxserver/SmartFoxClient.as:1401]

如果用户 2 创建房间 A 用户 1 加入房间 A 用户 2 退出房间 A

...用户2退出房间时没有错误。

所以,我有一个将用户连接到服务器的按钮,当用户连接并加入“大厅”房间时,他可以加入并创建房间,当两个玩家加入时,游戏开始。

我在 AS3 中使用 SFS Basic,我没有在任何地方调用 getRoomList(),我需要提到我有另一个与此类似的应用程序可以正常工作(相同的 api、相同的服务器、类似的功能流程)。

尝试了不同的解决方案,但没有任何帮助...

我不明白为什么我在这个应用程序上收到这个错误,而另一个工作正常,为什么我只有在创建房间时才会收到这个错误,而且我希望在任何用户创建房间时都会收到错误,而不仅仅是当用户 1 创建房间时。

非常感谢任何帮助或建议,我已经为这个问题苦苦挣扎了好几天......

更新: 如果我创建了一个 3 人房间(游戏室)并且游戏没有开始并且我连接了 2 名玩家然后他们断开连接一切都很好,但是如果游戏开始然后他们断开连接我会收到这个错误。

【问题讨论】:

您自己修改了SmartFoxClient 吗?如果不是,请在您获得代码的地方发送错误报告。如果是,参考文件中handleUserLeaveRoom() 的内容是什么?也许有一些东西被双重删除。 显示 handleUserLeaveRoom() 方法,假设您使用回调而不是其中的事件,我是否正确? 这是和事件。我没有编辑 SmartFoxClient,但这是错误所在: public function handleUserLeaveRoom(o:Object):void var userId:int = int(o.body.user.@id) var roomId:int = int (o.body.@r) 【参考方案1】:

我发现了问题,我希望我能用这个答案节省一些时间:

问题出在这一行:

sfs.getActiveRoom().getUserList().sort(randomize)[0].getName();

我正在使用此代码生成一个随机用户作为第一个播放,但实际上我似乎正在更改用户列表数组(通过对其进行排序)(sfs.getActiveRoom().getUserList())以及何时用户正在离开房间。繁荣!错误!空对象!

所以,我改变了这个:

   var userList:Array = new Array();
   userList = userList.concat(sfs.getActiveRoom().getUserList());
   var randomUser = userList.sort(randomize)[0].getName();

【讨论】:

以上是关于SmartFoxServer Basic 用户请假错误的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:无法在 smartFoxServer 中创建日志文件

我无法更新我的扩展 - SmartFoxServer

使用 SmartFoxServer 实现 Hazelcast

SmartFoxServer 与 Unity 日志记录问题

如何使用 SmartFoxServer 2X 连接 MySQL 数据库?

登录时区分注册用户和访客