od Danstahr » 19. 1. 2013 08:55
Piškvorky šly celkem v pohodě, úspěšnost odhadem přes 50%. Kód u sebe nemám, ale moje řešení bylo cca na 300 řádků následujícím postupem :
Klient i server mají jedno vlákno, které obsluhuje GUI a jedno vlákno, které řeší právě očekávanou úlohu. Měl jsem implementovaných několik jednoduchých runnablů (typu odešli socketem číslo, počkej než na socketu něco bude apod.), které jsem v příslušný moment hodil do nového threadu a pustil. Design vypadal asi takto:
- Spustí se server, spurtí se swing vlákno a vlákno, které čeká na připojení klienta
- Spustí se klient, spustí se swing vlákno, vlákno, které se připojí na server a vlákno, které čeká na soupeřův tah. Server to pozná a umožní hrát.
- Teď se periodicky střídají úkony, kdy jeden hráč provede tah, spustí odesílací vlákno a vlákno čekání na soupeřův tah. Na druhé straně tah zachytí čekací vlákno, zaznamená změny a končí. Provedením tahu se to celé opakuje.
Tenhle přístup mi přišel mnohem jednodušší, než si po celou dobu běhu programu držet jedno složité vlákno, které bude handlovat kompletní komunikaci.
Piškvorky šly celkem v pohodě, úspěšnost odhadem přes 50%. Kód u sebe nemám, ale moje řešení bylo cca na 300 řádků následujícím postupem :
Klient i server mají jedno vlákno, které obsluhuje GUI a jedno vlákno, které řeší právě očekávanou úlohu. Měl jsem implementovaných několik jednoduchých runnablů (typu odešli socketem číslo, počkej než na socketu něco bude apod.), které jsem v příslušný moment hodil do nového threadu a pustil. Design vypadal asi takto:
- Spustí se server, spurtí se swing vlákno a vlákno, které čeká na připojení klienta
- Spustí se klient, spustí se swing vlákno, vlákno, které se připojí na server a vlákno, které čeká na soupeřův tah. Server to pozná a umožní hrát.
- Teď se periodicky střídají úkony, kdy jeden hráč provede tah, spustí odesílací vlákno a vlákno čekání na soupeřův tah. Na druhé straně tah zachytí čekací vlákno, zaznamená změny a končí. Provedením tahu se to celé opakuje.
Tenhle přístup mi přišel mnohem jednodušší, než si po celou dobu běhu programu držet jedno složité vlákno, které bude handlovat kompletní komunikaci.