套接字侦听器不给出回调



我目前正在Kotlin/Java中构建一个多人游戏,我想使用nakama框架作为后端。当我在研究比赛加入系统时,我注意到我没有从nakama库的SocketListener接口获得回调。我不知道为什么会这样

nakama(java(的接口:

public interface SocketListener {
/**
* Called when the client socket disconnects.
*
* Throwable t is set if an error caused the disconnect.
*/
void onDisconnect(final Throwable t);
/**
* Called when the client receives an error.
*
* @param error The {@code Error} received.
*/
void onError(final Error error);
/**
* Called when a new topic message has been received.
*
* @param message The {@code ChannelMessage} received.
*/
void onChannelMessage(final ChannelMessage message);
/**
* Called when a new topic presence update has been received.
*
* @param presence The {@code ChannelPresenceEvent} received.
*/
void onChannelPresence(final ChannelPresenceEvent presence);
/**
* Called when a matchmaking has found a match.
*
* @param matched The {@code MatchmakerMatched} received.
*/
void onMatchmakerMatched(final MatchmakerMatched matched);
/**
* Called when a new match data is received.
*
* @param matchData The {@code MatchData} received.
*/
void onMatchData(final MatchData matchData);
/**
* Called when a new match presence update is received.
*
* @param matchPresence The {@code MatchPresenceEvent} received.
*/
void onMatchPresence(final MatchPresenceEvent matchPresence);
/**
* Called when the client receives new notifications.
*
* @param notifications The list of {@code Notification} received.
*/
void onNotifications(final NotificationList notifications);
/**
* Called when the client receives status presence updates.
*
* @param presence Updated {@code StatusPresenceEvent} presence.
*/
void onStatusPresence(final StatusPresenceEvent presence);
/**
* Called when the client receives stream presence updates.
*
* @param presence Updated {@code StreamPresenceEvent} presence.
*/
void onStreamPresence(final StreamPresenceEvent presence);
/**
* Called when the client receives stream data.
*
* @param data Stream {@code StreamData} data received.
*/
void onStreamData(final StreamData data);
}

我在Kotlin的实现:

class MSocketListener : SocketListener {
override fun onDisconnect(t: Throwable?) {
TODO("Not yet implemented")
}
override fun onError(error: Error?) {
TODO("Not yet implemented")
}
override fun onChannelMessage(message: ChannelMessage?) {
TODO("Not yet implemented")
}
override fun onChannelPresence(presence: ChannelPresenceEvent?) {
TODO("Not yet implemented")
}
override fun onMatchmakerMatched(matched: MatchmakerMatched?) {
TODO("Not yet implemented")
}
override fun onMatchData(matchData: MatchData?) {
TODO("Not yet implemented")
}
override fun onMatchPresence(matchPresence: MatchPresenceEvent?) {
TODO("Not yet implemented")
}
override fun onNotifications(notifications: NotificationList?) {
TODO("Not yet implemented")
}
override fun onStatusPresence(presence: StatusPresenceEvent?) {
TODO("Not yet implemented")
}
override fun onStreamPresence(presence: StreamPresenceEvent?) {
TODO("Not yet implemented")
}
override fun onStreamData(data: StreamData?) {
TODO("Not yet implemented")
}
}

有人知道我为什么不回电话吗?提前感谢

编辑:我现在还尝试在java类中实现该接口。。仍然没有回调

Java类(基本上与Kotlin类相同的代码,只是在Java中(:

public class NakamaTest implements SocketListener {
@Override
public void onDisconnect(Throwable t) {
//code
}
@Override
public void onError(Error error) {
//code
}
@Override
public void onChannelMessage(ChannelMessage message) {
//code
}
@Override
public void onChannelPresence(ChannelPresenceEvent presence) {
//code
}
@Override
public void onMatchmakerMatched(MatchmakerMatched matched) {
//code
}
@Override
public void onMatchData(MatchData matchData) {
//code
}
@Override
public void onMatchPresence(MatchPresenceEvent matchPresence) {
//code
}
@Override
public void onNotifications(NotificationList notifications) {
//code
}
@Override
public void onStatusPresence(StatusPresenceEvent presence) {
//code
}
@Override
public void onStreamPresence(StreamPresenceEvent presence) {
//code
}
@Override
public void onStreamData(StreamData data) {
//code
}
}

经过大量的尝试和错误,我终于解决了它。我在这里发布这篇文章是为了在极少数情况下任何人都会有同样的问题。

首先,我必须使用AbstractSocketListener而不是SocketListener,它们都是由Nakama框架提供的。

然后,您必须创建一个侦听器变量,如下所示:

val listener: SocketListener = object : AbstractSocketListener() {
override fun onMatchPresence(matchPresence: MatchPresenceEvent?) {
super.onMatchPresence(matchPresence)
//code
}
}

我选择了onMatchPresence回调作为示例,但您可以使用Nakama提供的所有回调,例如,这些回调列在我上面问题的代码块中,或Java文档中。如果你使用的是安卓工作室,你可以先输入override fun *name of callback*,然后按Tab。安卓工作室应该自动为您创建其余的功能。

下一步,我们需要我们的插座。如果你还没有创建一个:

val client: Client = DefaultClient("defaultkey")
val socket: SocketClient = client.createSocket()

有关创建客户端和套接字的更多信息,请查看文档的入门部分

之后,我们的最后一步是将我们的侦听器链接到我们的套接字,这可以如下完成:

socket.connect(session, listener).get()

之后,你应该准备好出发了!当您得到回调时,您可以将想要执行的代码放在我用注释标记的部分中。

最新更新