Dziś update projektu DSP. Niestety, namacalnych efektów pracy nie ma jeszcze zbyt wiele. Przez to, że ostatnio jestem ciągle w ruchu i z dala od kompa, musiałem skupić się głównie na planowaniu. A jest co planować, bo zanim zacznę konkretne pracę, muszę ustalić kilka „drobnych szczegółów”. Począwszy od architektury a na zagadnieniach związanych z gameplayem kończąc.
Jednak już mnie swędziały ręce, żeby w końcu coś napisać, dlatego przez weekend zarezerwowałem chwilę i stworzyłem jakiś tam pierwszy szkielet projektu i chciałbym się dzisiaj nim pochwalić.
Aktualny stan kodu projektu można monitorować na bieżąco w tym repozytorium na github.
Tak naprawdę moim głównym celem gdy zasiadałem do kodu, było zainstalowanie wszystkich wymaganych paczek oraz poustawianie wszelkiej konfiguracji. Dzięki temu kolejne sesje będę mógł poświęcić na faktyczne tworzenie gry. Póki co zająłem się tylko backendem, na front przyjdzie pora później.
Ku mojemu wielkiemu zdziwieniu, wcale nie było trzeba tak dużo ustawiać. Pierwsze skrzypce po stronie backendu grają tak naprawdę tylko dwa narzędzia. Pierwsze to express, czyli framework do obsługi serwera, a drugie to typescript, superset JSa, język w którym mój projekt będzie tworzony.
Oczywiście do poprawnego działania całości, musiałem do projektu dodać odpowiednie definicje typów. Użyłem do tego narzędzia typings, które już opisywałem na blogu.
Na koniec zostało tylko dorzucenie czegoś do odpalania plików TS. Do tego zadania skorzystałem z narzędzia ts-node. mogę za jego pomocą robić dokładnie to co potrzebuje, czyli uruchamiać skrypty ts z konsoli. Dla wygody dodałem nawet skrypt start w package.json, który uruchamia serwerowy index.ts czyli punkt wejścia dla backendu aplikacji.
Ten prosty setup pozwolił mi na stworzenie pierwszego działającego skryptu aplikacji. Tak wygląda plik index.ts:
1 2 3 4 5 6 |
import {Server} from './core/server'; var server = new Server(); server.setRoutes(); server.startServer(); |
Na samej górze importuję klasę serwer, która zawiera wszystkie mechanizmy potrzebne do obsługi serwera. Kolejne kroki to oczywiście inicjalizacja tej klasy, a następnie wywołanie dwóch jej metod: setRoutes oraz startServer. Nazwy tych metod dość jasno opisują ich działanie, ale zobaczmy bebechy klasy Server. Znajduje się ona w pod-katalogu core w pliku server.ts:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import * as express from 'express' export class Server { private app: express.Express; constructor() { this.app = express(); } public setRoutes() { this.app.get('/', this.renderResponse) } public startServer() { this.app.listen(1337, function(){ console.log('An adventurer joins the fight...') }) } private renderResponse(req: express.Request, res: express.Response){ res.send('Welcome Adventurer!') } } |
Przed definiowaniem klasy, importuje do mojego modułu moduł express. Następnie tworzę klasę Server, która oczywiście jest eksportowana na zewnątrz. W klasie definiuję jedno pole app, które jest typu obiektu Express. W konstruktorze do pola przypisuję odpowiednią wartość.
Klasa Server zawiera też również trzy metody dwie publiczne: setRoutes i startServer oraz jedną prywatną: renderResponse. Jak widać są to bardzo podstawowe mechanizmy express, nawet samego TSa nie ma tu zbyt wiele.
Po wywołaniu setRoutes oraz startServer użytkownik który odwiedzi port 1337 w localhost zobaczy tekst ‚Welcome Adventurer!’. Do tego po jego podłączeniu się do serwera, konsola serwerowa zwróci log: ‚An adventurer joins the fight…’ 🙂 .
Na dziś to wszystko 🙂 . W kolejnych postach rozwinę ten pierwszy setup o skrypty gulopowe oraz strukturę testów. Gdy to będzie już gotowe, zabiorę się za faktyczny rozwój gry. Jeżeli chcesz być na bieżąco z postami na blogu zachęcam do polubienia mojej strony na facebooku. Zawsze zamieszczam tam informacje o wszystkich nowościach. Jest to też dobre miejsce na kontakt ze mną. Na wszystkie pytania zawsze odpowiem 🙂 .