这是我在伪代码中的情况:
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中实现这一点,但欢迎使用通用解决方案。
答案 0 :(得分:1)
许多很好的解决方案,但我建议使用回电。
在方法返回后不要将其视为做某事,将其视为回调报告状态或触发事件。
搜索事件模式,或使用Java回调。这是one link I found。
delegation pattern非常相似。
答案 1 :(得分:0)
您是否可以先发送响应,然后执行“if(playersConnected”检查?
答案 2 :(得分:0)
我不确定你在这里的闭包语法。你可以这样做吗?
function onRequest() {
playersConnected++;
sendResponse(OK);
if (playersConnected == 4) {
sendAllPlayersTheirCards()
}
}
答案 3 :(得分:0)
这似乎是一个相关的教程:
答案 4 :(得分:0)
我可以这样做:
function onRequest(request) {
game.handleRequest(request, function(response) {
sendResponse(response);
}
}
class game
function handleRequest(request, sendResponse:Function) {
players++;
sendResponse(OK);
if (players == 4) sendCards();
}