diff --git a/client/src/socket.jsx b/client/src/socket.jsx index fbc6b296..9ab92870 100644 --- a/client/src/socket.jsx +++ b/client/src/socket.jsx @@ -318,11 +318,8 @@ function createSocket(events) { return handlers[msgType](params); } - let attempts = 1; - // Connection opened function onOpen() { - attempts = 0; toast.info({ message: 'connected', position: 'topRight', @@ -341,21 +338,12 @@ function createSocket(events) { } function onClose(event) { - attempts *= 2; - if (attempts > 10) { - toast.warning({ - message: 'unable to connect, refreshing...', - position: 'topRight', - }); - setTimeout(() => window.location.reload(true), 2000); - } - console.error('WebSocket closed', event); toast.warning({ message: 'disconnected', position: 'topRight', }); - return setTimeout(connect, attempts * 1000); + return setTimeout(connect, 2000); } function connect() { diff --git a/server/src/account.rs b/server/src/account.rs index 8e8a1b6f..90d3f431 100644 --- a/server/src/account.rs +++ b/server/src/account.rs @@ -12,6 +12,7 @@ use http::MnmlHttpError; use names::{name as generate_name}; use construct::{Construct, ConstructSkeleton, construct_spawn}; use instance::{Instance, instance_delete}; +use instance; use mtx::{Mtx, FREE_MTX}; use pg::Db; use img; @@ -502,3 +503,25 @@ pub fn img_check(account: &Account) -> Result { false => Ok(account.img), } } + +pub fn tutorial(tx: &mut Transaction, account: &Account) -> Result, Error> { + let query = " + SELECT count(id) + FROM players + WHERE account = $1; + "; + + let result = tx + .query(query, &[&account.id])?; + + let row = result.iter().next() + .ok_or(format_err!("unable to fetch joined games account={:?}", account))?; + + let count: i64 = row.get(0); + + if count == 0 { + return Ok(Some(instance::instance_practice(tx, account)?)); + } + + return Ok(None); +} \ No newline at end of file diff --git a/server/src/rpc.rs b/server/src/rpc.rs index e0db439a..fbd8a2f8 100644 --- a/server/src/rpc.rs +++ b/server/src/rpc.rs @@ -353,6 +353,10 @@ impl Handler for Connection { let wheel = account::chat_wheel(&db, a.id).unwrap(); self.send(RpcMessage::ChatWheel(wheel)).unwrap(); + if let Some(instance) = account::tutorial(&mut tx, &a).unwrap() { + self.send(RpcMessage::InstanceState(instance)).unwrap(); + } + // tx should do nothing tx.commit().unwrap(); } else {