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退出房间时没有错误。
所以,我有一个将用户连接到服务器的按钮,当用户连接并加入“大厅”房间时,他可以加入并创建房间,当两个玩家加入时,游戏开始。
我在 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 实现 Hazelcast