millennium-dev team mailing list archive
-
millennium-dev team
-
Mailing list archive
-
Message #00082
Schemat połączenia sieciowego, czyli co tam cielak wsadził do pnia
Zgodnie z planem, kończymy trening. Efekty wydania wersji 0.0 można
podziwiać tu [1].
Tak więc pień wyczyściłem...
... ale by nie stał pusty, już wstawiłem tam sporo kodu, który zaklepałem
przez weekend. Tak jako punkt zaczepienia, by było wiadomo co to jest co,
gdzie pakować kod, i żeby się w ogóle kompilowało.
Konkretnie, to zamieściłem kod obsługujący elementarne połączenie, i
umożliwiający dwusotronną rozmowę przez sieć.
Schemat organizacji klas jest dokładnie taki, jak pokazałem na rysunku na
tablicy.
Jedyne detale co mogą wymagać wyjaśnień:
- Jest jedna dodatkowa klasa, CServer, której na rysunku nie było, to
klasa która zarządza wątkiem nasłuchującym na serwerze nowych połączeń od
klientów, i gdy takowe połączenie nastąpi, tworzy nowy obiekt
CConnectionToClient itd.
- Interfejsy nazwałem nie A i B, tylko IPlayerActions oraz
IPlayerReactions, gdzie pierwszy zawiera akcje, jakie gracz może chcieć
wykonać wobec gry, a drugi zawiera akcje używane przez grę, by powiadomić o
czymś gracza, zapewne ten gracz będzie chciał na nie jakoś reagować.
Skrypty budujące są *dwa*. ./build_server tworzy program o nazwie *server*,
./build_client, no, analogicznie. O co chodzi?
Spójrzcie proszę do kodu main.cpp, który zawiera demosntrację użycia
pozostałych klas (podgląd kodu tutaj: [2]). Ten plik jest dwojaki, i w
zależności od sposobu kompliacji wyprodukuje 2 zupełnie różne main()y.
Jeden demonstruje użycie serwera, drugi to przykładowy klient.
Oba programy można testować i powinny sprawnie działać.
Tj. włączamy serwer i zostawiamy odpalony, po czym wlączamy 2 kopie
klienta. Każda linijka napisana w kliencie jest wysyłana do serwera, a ten
przekazuje to drugiemu klientowi. No, prosty chat.
Klient ma whardkodowany adres pod który się łączy i jest nim 127.0.0.1, tak
więc bez modyfikacji kodu zadziała tylko połączenie lokalne. Nie miałem
jeszcze okazji testować połączenia zdalnego, ale powinno śmigać identycznie.
W razie pytań uwag czy wątpliwości na temat tego kodu, mailujcie, a by
pogawędzić zapraszam na IRCa.
Przypominam, że pod [3] i [4] można poglądać nasze aktualne zamiary na
pierwszy etap pracy.
No i jako że trening się skończył, to mogę wszystkich oficjalnie zaprosić
do prawdziwej roboty. Miłej zabawy!
[1]: https://launchpad.net/libmillennium/trunk/0.0
[2]:
http://bazaar.launchpad.net/~millennium-dev/libmillennium/trunk/view/head:/src/main.cpp
[3]: https://launchpad.net/libmillennium/+milestone/0.1
[4]: https://launchpad.net/millenniumduel/+milestone/0.1