2010-11-29 14 views
0

Dies ist meine Situation in Pseudo-Code:Tun Sie etwas nach Methode gibt

function onRequest() { 
    receiveConnectionRequest(); 

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

    sendResponse(response); 

} 

Wenn Spieler 1-3 connect, sie in die Liste der Spieler hinzukommen und OK wird ihnen zurückgegeben, an welcher Stelle sie gesetzt stuff auf ihrer Seite. Wenn Spieler 4 jedoch eine Verbindung herstellt, bevor die Antwort auf seine Anfrage gesendet wird, werden alle Spieler ihre Karten gesendet. Da Spieler 4 noch keine Antwort auf seine Anfrage erhalten hat, hat er noch nicht richtig initialisiert und Fehler beim Erhalt seiner Karten.

Was ich möchte, ist, dass wir dieses:

function onRequest() { 
    receiveConnectionRequest(); 

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

    sendResponse(response); 

    executePlanned() // now cards are sent 
} 

Gibt es ein allgemeines Muster für das? Die onConnect-Funktion befindet sich in einer anderen Klasse und sollte die Implementierungsdetails von onRequest nicht kennen.

Ich versuche speziell, dies in Java zu implementieren, aber generische Lösungen sind willkommen.

+0

wie Delegation Sieht aus. plan() ist hier, um die Delegierung einzurichten, und executePlanned() ruft die in der Warteschlange befindlichen Aktionen auf. – Sorpigal

Antwort

1

Viele gute Lösungen, aber ich würde vorschlagen, wieder einen Anruf mit.

sie denken es ist nicht etwas, nachdem die Methode zurückgibt, halten sie für einen Rückruf melden einen Staat oder auslösen ein wie zu tun Ereignis

Suchen nach Ereignismuster oder Rückruf in Java. Hier ist one link I found.

Die ist sehr ähnlich.

0

Können Sie nicht die Antwort zuerst senden und dann tun die „if (playersConnected“ nach dem Check?

+0

In meiner aktuellen Einrichtung muss die Antwort von der Funktion zurückgegeben werden, die überprüft, ob alle Spieler verbunden sind –

0

Ich bin nicht sicher über diese Schließung Syntax, die Sie hier haben. Können Sie das gerade statt? Als

function onRequest() { 
    playersConnected++; 

    sendResponse(OK); 

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

kann ich nicht, weil der Code, der den Empfang der Anfrage und das Senden der Antwort behandelt, Teil eines generischen Pakets ist, und der Code, der playersConnected ++ enthält, ist Teil eines anderen, spielspezifischen Pakets. –

0

ich es so tun könnte:

function onRequest(request) { 

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

} 

class game 
function handleRequest(request, sendResponse:Function) { 
players++; 
sendResponse(OK); 
if (players == 4) sendCards(); 
} 
Verwandte Themen