0

这是我在伪代码中的情况:

function onRequest() {
    receiveConnectionRequest();

    response = function onConnect() {
        playersConnected++;
        if (playersConnected == 4) {
            sendAllPlayersTheirCards()
        }
        return OK;
    }();

    sendResponse(response);

}

当玩家 1-3 连接时,他们会被添加到玩家列表中,并且 OK 会返回给他们,此时他们将在他们身边设置东西。然而,当玩家 4 连接时,在发送对他的请求的响应之前,所有玩家都会收到他们的牌。因为玩家 4 还没有收到对他的请求的响应,所以他还没有正确初始化并且在收到他的牌时出错。

我想要的是这样的:

function onRequest() {
    receiveConnectionRequest();

    response = function onConnect() {
        playersConnected++;
        if (playersConnected == 4) {
            plan(sendAllPlayersTheirCards())
        }
        return OK;
    }();

    sendResponse(response);

    executePlanned() // now cards are sent
}

有没有通用的模式?onConnect 函数在不同的类中,不应该知道 onRequest 的实现细节。

我专门尝试在 Java 中实现这一点,但欢迎使用通用解决方案。

4

5 回答 5

1

对此有很多很好的解决方案,但我建议使用回调。

不要把它当做方法返回后做的事情,把它当做回调报告状态或触发事件。

在 Java 中搜索事件模式或回调。这是我找到的一个链接

委托模式非常相似。

于 2010-11-29T17:06:30.150 回答
0

I could do it like this:

function onRequest(request) {

 game.handleRequest(request, function(response) {
  sendResponse(response);
 }

}

class game
function handleRequest(request, sendResponse:Function) {
 players++;
 sendResponse(OK);
 if (players == 4) sendCards();
}
于 2010-11-29T23:12:25.270 回答
0

您不能先发送响应,然后再执行“if(playersConnected”) 检查吗?

于 2010-11-29T17:04:30.727 回答
0

我不确定你在这里的这个闭包语法。你可以用这个来代替吗?

function onRequest() {
    playersConnected++;

    sendResponse(OK);

    if (playersConnected == 4) {
        sendAllPlayersTheirCards()
    }
}
于 2010-11-29T17:04:52.850 回答
0

这似乎是一个相关的教程:

使用 Callable 从 Runnables 返回结果

于 2010-11-29T17:07:54.597 回答