Smartfoxserver虽然是商业的游戏服务器,但是文档很不完善,在写服务器的扩展以及和服务器端交互的客户端代码时,觉得很困难。比如说写服务器扩展时,你可能要处理内部的事件,那么你需要重载handleInternalEvent, 然后这个函数会为服务器自动调用。但是你要知道发生的是什么事件时,你可能无从下手。而官方的网站也没有对应很详细的说明。
(如果有人知道请告知,请写在评论中,不胜感激, 哈哈,今天终于找到了:http://www.smartfoxserver.com/docs/docPages/javadoc/it/gotoandplay/smartfoxserver/events/InternalEventObject.html)
看一下这个函数传进来的参数:
InternalEventObject, 其实你查这个类的详细说明,同样是没有,那怎么办?
那就猜,写代码测试你的猜测。假设你是在Eclipse中编辑代码,因为有了它,它至少可以给你提示它有什么方法和属性。
public void handleInternalEvent(InternalEventObject arg0)
你可以用arg0然后再输入点, 即 arg0. Eclipse就会列出所有方法和属性,看到一个getEventName对吧,看这个比较像,那就试试这个吧,你不用试了,我已经帮你试了,确实可以得到事件。测试的方法就是把每次这个函数的返回值答应出来,看看和实际发生的事情是否相符,比如说login, logout, get lost等等。
这个方法同时告诉你这些事件的事件名,
login———-userLogin
logout——–userLogout
get lost——-userLost
那你是不是还想知道更多的事件名,对吧。难道你还要用这个方法吗?可以吗?当然可以。其实我们还有一种方法,这是我后来无意中发现的。
就是arg0然后’点’一下,让Ecilpse显示出所有的方法和属性,往下拉,显示出最下面的属性和方法,你就看到所有可用的事件了,如EVENT_JOIN。
好了,让我列出所有的事件吧:
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_LOGIN = “loginRequest”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_LOGOUT = “logOut”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_JOIN = “userJoin”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_USER_EXIT = “userExit”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_USER_LOST = “userLost”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_SPECTATOR_SWITCHED = “spectatorSwitched”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_NEW_ROOM = “newRoom”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_ROOM_LOST = “roomLost”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_PUBLIC_MESSAGE = “pubMsg”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_PRIVATE_MESSAGE = “privMsg”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_FILE_UPLOAD = “fileUpload”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_SERVER_READY = “serverReady”;
// Field descriptor #6 Ljava/lang/String;
public static final java.lang.String EVENT_PLAYER_SWITCHED = “playerSwitched”;
看到了吧,其实我们之前测试中打印出来的就是这些事件的事件名。
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.
你好.请问下 handleInternalEvent handleRequest有什么区别?分别在什么情况下执行呢?
回复 soft_ran:
handleinternalevent: 是发生服务器事件的时候被调用,如用户的connect, disconnect, login, logout等。
handleRequest: 是client端提交自定义的事件时被调用