summaryrefslogtreecommitdiff
path: root/frontend/src/api/sevenWondersApi.ts
diff options
context:
space:
mode:
authorJoffrey BION <joffrey.bion@gmail.com>2019-05-03 00:26:07 +0200
committerJoffrey BION <joffrey.bion@gmail.com>2019-05-03 00:33:45 +0200
commita8aa74bfa858e3f9312fc27b9aff5443f84b439f (patch)
tree9cc0a527ea1190abc6f4961c6e028ecfbc1f8a6e /frontend/src/api/sevenWondersApi.ts
parentAdd TypeScript support (diff)
downloadseven-wonders-a8aa74bfa858e3f9312fc27b9aff5443f84b439f.tar.gz
seven-wonders-a8aa74bfa858e3f9312fc27b9aff5443f84b439f.tar.bz2
seven-wonders-a8aa74bfa858e3f9312fc27b9aff5443f84b439f.zip
Convert api package to typescript
Diffstat (limited to 'frontend/src/api/sevenWondersApi.ts')
-rw-r--r--frontend/src/api/sevenWondersApi.ts104
1 files changed, 104 insertions, 0 deletions
diff --git a/frontend/src/api/sevenWondersApi.ts b/frontend/src/api/sevenWondersApi.ts
new file mode 100644
index 00000000..4f76a677
--- /dev/null
+++ b/frontend/src/api/sevenWondersApi.ts
@@ -0,0 +1,104 @@
+import {
+ ApiError,
+ ApiLobby,
+ ApiPlayer,
+ ApiPlayerMove,
+ ApiPlayerTurnInfo,
+ ApiPreparedCard,
+ ApiSettings,
+ ApiTable,
+} from './model';
+import { JsonStompClient, SubscribeFn } from './websocket';
+import { createJsonStompClient } from './websocket';
+
+const WS_URL = '/seven-wonders-websocket';
+
+export class SevenWondersSession {
+ client: JsonStompClient;
+
+ constructor(client: JsonStompClient) {
+ this.client = client;
+ }
+
+ watchErrors(): SubscribeFn<ApiError> {
+ return this.client.subscriber('/user/queue/errors');
+ }
+
+ watchNameChoice(): SubscribeFn<ApiPlayer> {
+ return this.client.subscriber('/user/queue/nameChoice');
+ }
+
+ chooseName(displayName: string): void {
+ this.client.send('/app/chooseName', { playerName: displayName });
+ }
+
+ watchGames(): SubscribeFn<ApiLobby[]> {
+ return this.client.subscriber('/topic/games');
+ }
+
+ watchLobbyJoined(): SubscribeFn<Object> {
+ return this.client.subscriber('/user/queue/lobby/joined');
+ }
+
+ createGame(gameName: string): void {
+ this.client.send('/app/lobby/create', { gameName });
+ }
+
+ joinGame(gameId: number): void {
+ this.client.send('/app/lobby/join', { gameId });
+ }
+
+ watchLobbyUpdated(currentGameId: number): SubscribeFn<Object> {
+ return this.client.subscriber(`/topic/lobby/${currentGameId}/updated`);
+ }
+
+ watchGameStarted(currentGameId: number): SubscribeFn<Object> {
+ return this.client.subscriber(`/topic/lobby/${currentGameId}/started`);
+ }
+
+ leave(): void {
+ this.client.send('/app/lobby/leave');
+ }
+
+ reorderPlayers(orderedPlayers: Array<string>): void {
+ this.client.send('/app/lobby/reorderPlayers', { orderedPlayers });
+ }
+
+ updateSettings(settings: ApiSettings): void {
+ this.client.send('/app/lobby/updateSettings', { settings });
+ }
+
+ startGame(): void {
+ this.client.send('/app/lobby/startGame');
+ }
+
+ watchPlayerReady(currentGameId: number): SubscribeFn<string> {
+ return this.client.subscriber(`/topic/game/${currentGameId}/playerReady`);
+ }
+
+ watchTableUpdates(currentGameId: number): SubscribeFn<ApiTable> {
+ return this.client.subscriber(`/topic/game/${currentGameId}/tableUpdates`);
+ }
+
+ watchPreparedCards(currentGameId: number): SubscribeFn<ApiPreparedCard> {
+ return this.client.subscriber(`/topic/game/${currentGameId}/prepared`);
+ }
+
+ watchTurnInfo(): SubscribeFn<ApiPlayerTurnInfo> {
+ return this.client.subscriber('/user/queue/game/turn');
+ }
+
+ sayReady(): void {
+ this.client.send('/app/game/sayReady');
+ }
+
+ prepareMove(move: ApiPlayerMove): void {
+ this.client.send('/app/game/prepareMove', { move });
+ }
+}
+
+export async function connectToGame(): Promise<SevenWondersSession> {
+ const jsonStompClient: JsonStompClient = createJsonStompClient(WS_URL);
+ await jsonStompClient.connect();
+ return new SevenWondersSession(jsonStompClient);
+}
bgstack15