+ // Ask server for current corr games (all but mines)
+ ajax(
+ "/games",
+ "GET",
+ {uid: this.st.user.id, excluded: true},
+ response => {
+ this.games = this.games.concat(response.games.map(g => {
+ const type = this.classifyObject(g);
+ const vname = this.getVname(g.vid);
+ return Object.assign({}, g, {type: type, vname: vname});
+ }));
+ }
+ );
+ // Also ask for corr challenges (open + sent to me)
+ ajax(
+ "/challenges",
+ "GET",
+ {uid: this.st.user.id},
+ response => {
+ // Gather all senders names, and then retrieve full identity:
+ // (TODO [perf]: some might be online...)
+ const uids = response.challenges.map(c => { return c.uid });
+ ajax("/users",
+ "GET",
+ { ids: uids.join(",") },
+ response2 => {
+ let names = {};
+ response2.users.forEach(u => {names[u.id] = u.name});
+ this.challenges = this.challenges.concat(
+ response.challenges.map(c => {
+ // (just players names in fact)
+ const from = {name: names[c.uid], id: c.uid};
+ const type = this.classifyObject(c);
+ const vname = this.getVname(c.vid);
+ return Object.assign({}, c, {type: type, vname: vname, from: from});
+ })
+ )
+ }
+ );
+ }
+ );
+ // 0.1] Ask server for room composition:
+ const funcPollClients = () => {
+ // Same strategy as in Game.vue: send connection
+ // after we're sure WebSocket is initialized
+ this.st.conn.send(JSON.stringify({code:"connect"}));
+ this.st.conn.send(JSON.stringify({code:"pollclients"}));
+ };
+ if (!!this.st.conn && this.st.conn.readyState == 1) //1 == OPEN state
+ funcPollClients();
+ else //socket not ready yet (initial loading)
+ this.st.conn.onopen = funcPollClients;
+ this.st.conn.onmessage = this.socketMessageListener;
+ const socketCloseListener = () => {
+ store.socketCloseListener(); //reinitialize connexion (in store.js)
+ this.st.conn.addEventListener('message', this.socketMessageListener);
+ this.st.conn.addEventListener('close', socketCloseListener);
+ };
+ this.st.conn.onclose = socketCloseListener;
+ },
+ mounted: function() {
+ [document.getElementById("infoDiv"),document.getElementById("newgameDiv")]
+ .forEach(elt => elt.addEventListener("click", processModalClick));
+ document.querySelectorAll("#predefinedTimeControls > button").forEach(
+ (b) => { b.addEventListener("click",
+ () => { this.newchallenge.timeControl = b.innerHTML; }
+ )}
+ );