2010-11-29 122 views
0

後,這是我在僞情況:做一些方法返回

function onRequest() { 
    receiveConnectionRequest(); 

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

    sendResponse(response); 

} 

當玩家1-3連接,它們會加入到玩家的列表,並確定被歸還給他們,在這一點上,他們將設置填補他們的一面。然而,當玩家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

貌似代表團。 plan()在這裏設置委託,executePlanned()調用排隊的動作。 – Sorpigal 2010-11-29 17:06:37

回答

1

許多優秀的解決方案,但我會建議使用回呼。

不要把它想成方法返回後做的事情,把它當做回調報告的狀態或觸發事件

搜索事件模式或使用Java回調。這裏是one link I found

delegation pattern是非常相似。

0

你能不能先發響應,然後做了「如果(playersConnected」之後?

+0

在我當前的設置中,響應必須由檢查所有播放器是否連接的函數返回 – 2010-11-29 23:14:02

0

我不知道你這裏有這個閉合的語法檢查,你能只有這個呢?

這個
function onRequest() { 
    playersConnected++; 

    sendResponse(OK); 

    if (playersConnected == 4) { 
     sendAllPlayersTheirCards() 
    } 
} 
+0

我不能,因爲處理接收請求和發送響應的代碼是通用包的一部分,而PlayersConnected ++的代碼是另一個特定於遊戲的軟件包的一部分。 – 2010-11-29 23:08:29

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(); 
} 
相關問題