Skip to content

Commit

Permalink
feat(app-general): add synchronous rtdb initialization
Browse files Browse the repository at this point in the history
  • Loading branch information
albertodigioacchino committed Feb 1, 2021
1 parent 872eae6 commit b4b228e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 22 deletions.
12 changes: 12 additions & 0 deletions packages/game-app/src/gameView/apis/initializeRTDBInstance.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import CONFIG from '@pipeline/app-config';
import firebase from 'firebase';

export function initializeRTDB(rtdbInstance: string, gameId: string) {
const app = firebase.initializeApp(
{
databaseURL: `https://${rtdbInstance}.firebasedatabase.app`,
},
gameId,
);
CONFIG.REACT_APP_FIREBASE_USE_EMULATORS === 'true' && app.database().useEmulator('localhost', 9000);
}
13 changes: 8 additions & 5 deletions packages/game-app/src/gameView/sagas/loadGame.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { CardEntity, CardTypes } from '@pipeline/common';
import loadGame from '../apis/callLoadGame';
import loadCardsForDeck from '../apis/callLoadCardsForDeck';
import { Game } from '@pipeline/models';
import { initializeRTDB } from '../apis/initializeRTDBInstance';

/*
function firebaseGameChannel(gameId: string) {
Expand All @@ -27,13 +28,15 @@ function* executeLoadGame(action: ReturnType<typeof actions.loadGame>) {
yield put(actions.saveCards(cards));
// TODO load actual game state from firestore

if (game.rtdbInstance) {
yield put(actions.saveGame({ ...game, id: gameId }));
} else {
const bestRTDBInstance = yield call(selectBestRTDBInstance, gameId);
yield put(actions.saveGame({ ...game, rtdbInstance: bestRTDBInstance, id: gameId }));
if (!game.rtdbInstance) {
game.rtdbInstance = yield call(selectBestRTDBInstance, gameId);
}

//keep initialization before game saving
initializeRTDB(game.rtdbInstance!, gameId);

yield put(actions.saveGame({ ...game, id: action.payload }));

const gameState: GameState = {
boardCards: [],
deckCards: cards.filter(c => c.type === CardTypes.PipelineStep).map(c => c.id),
Expand Down
11 changes: 0 additions & 11 deletions packages/game-app/src/userGameStatus/apis/callUpdateConnections.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,5 @@
import firebase from 'firebase';
import { RTDBPaths } from '@pipeline/common';
import CONFIG from '@pipeline/app-config';

export function initializeRTDB(rtdbInstance: string, gameId: string) {
const app = firebase.initializeApp(
{
databaseURL: `https://${rtdbInstance}.firebasedatabase.app`,
},
gameId,
);
CONFIG.REACT_APP_FIREBASE_USE_EMULATORS === 'true' && app.database().useEmulator('localhost', 9000);
}

export async function startListenToOnlineStatus(
uid: string,
Expand Down
7 changes: 1 addition & 6 deletions packages/game-app/src/userGameStatus/sagas/userGameStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,7 @@ import { call, put, select, takeEvery, take } from 'redux-saga/effects';
import { channel } from 'redux-saga';
import { actions } from '../slice';
import { actions as loadGameActions, selectors as gameSelectors } from '../../gameView/slice';
import {
startListenToOnlineStatus,
stopListenToOnlineStatus,
initializeRTDB as callInitializeRTDB,
} from '../apis/callUpdateConnections';
import { startListenToOnlineStatus, stopListenToOnlineStatus } from '../apis/callUpdateConnections';
import { AuthUser, selectors as authSelectors } from '@pipeline/auth';
import { GameEntity } from '@pipeline/models';

Expand Down Expand Up @@ -51,7 +47,6 @@ export function* watchStatusChannel() {

function* executeInitializeRTDB(action: ReturnType<typeof loadGameActions.saveGame>) {
if (action.payload.rtdbInstance) {
yield call(callInitializeRTDB, action.payload.rtdbInstance, action.payload.id);
yield put(actions.startListenToOnlineStatus());
}
}
Expand Down

0 comments on commit b4b228e

Please sign in to comment.