diff --git a/client/src/actions.jsx b/client/src/actions.jsx index b4f09823..96ba0ef5 100644 --- a/client/src/actions.jsx +++ b/client/src/actions.jsx @@ -17,7 +17,6 @@ export const setConstructRename = value => ({ type: 'SET_CONSTRUCT_RENAME', valu export const setGame = value => ({ type: 'SET_GAME', value }); export const setInfo = value => ({ type: 'SET_INFO', value }); export const setInstance = value => ({ type: 'SET_INSTANCE', value }); -export const setInstanceList = value => ({ type: 'SET_INSTANCE_LIST', value }); export const setInstances = value => ({ type: 'SET_INSTANCES', value }); export const setItemEquip = value => ({ type: 'SET_ITEM_EQUIP', value }); export const setItemInfo = value => ({ type: 'SET_ITEM_INFO', value }); diff --git a/client/src/components/instance.create.buttons.jsx b/client/src/components/instance.create.buttons.jsx deleted file mode 100644 index 82efa245..00000000 --- a/client/src/components/instance.create.buttons.jsx +++ /dev/null @@ -1,46 +0,0 @@ -const preact = require('preact'); -const { connect } = require('preact-redux'); -const { Component } = require('preact'); - -const addState = connect( - function receiveState(state) { - const { ws, team, account } = state; - - function sendInstanceNew(sConstructs, pve) { - if (sConstructs.length) { - return ws.sendInstanceNew(sConstructs, account.name, pve); - } - return false; - } - - return { - sendInstanceNew, - team, - }; - } -); - -function CreateButtons(args) { - const { team, sendInstanceNew } = args; - const disabled = !team.every(c => c); - - const classes = `create-form ${disabled ? 'disabled' : ''}`; - return ( -
- - -
- ); -} - -module.exports = addState(CreateButtons); diff --git a/client/src/components/instance.create.form.jsx b/client/src/components/instance.create.form.jsx deleted file mode 100644 index 0ccf3738..00000000 --- a/client/src/components/instance.create.form.jsx +++ /dev/null @@ -1,91 +0,0 @@ -const preact = require('preact'); -const { connect } = require('preact-redux'); -const { Component } = require('preact'); - -const addState = connect( - function receiveState(state) { - const { ws, team } = state; - - function sendInstanceNew(sConstructs, name, pve) { - if (sConstructs.length) { - return ws.sendInstanceNew(sConstructs, name, pve); - } - return false; - } - - return { - sendInstanceNew, - team, - }; - } -); - -class InstanceCreateForm extends Component { - constructor(props) { - super(props); - - this.state = { pve: false, name: '' }; - - const { sendInstanceNew } = props; - - this.sendInstanceNew = sendInstanceNew.bind(this); - - this.nameInput = this.nameInput.bind(this); - this.pveChange = this.pveChange.bind(this); - this.handleSubmit = this.handleSubmit.bind(this); - } - - pveChange() { - this.setState({ pve: !this.state.pve }); - } - - nameInput(event) { - this.setState({ name: event.target.value }); - } - - handleSubmit(event) { - event.preventDefault(); - this.sendInstanceNew(this.props.team, this.state.name, this.state.pve); - this.setState({ name: '', pve: false }); - } - - render() { - const disabled = !this.props.team.every(c => c); - - const classes = `create-form ${disabled ? 'disabled' : ''}`; - return ( -
-
-
- New Instance - - - - - -
-
- -
- ); - } -} - -module.exports = addState(InstanceCreateForm); diff --git a/client/src/components/join.buttons.jsx b/client/src/components/join.buttons.jsx new file mode 100644 index 00000000..c311da5e --- /dev/null +++ b/client/src/components/join.buttons.jsx @@ -0,0 +1,46 @@ +const preact = require('preact'); +const { connect } = require('preact-redux'); + +const addState = connect( + function receiveState(state) { + const { ws } = state; + + function sendInstancePractice() { + ws.sendInstancePractice(); + } + + function sendInstanceQueue() { + ws.sendInstanceQueue(); + } + + return { + sendInstanceQueue, + sendInstancePractice, + }; + } +); + +function CreateButtons(args) { + const { + sendInstanceQueue, + sendInstancePractice, + } = args; + + return ( +
+

Join Game

+ + +
+ ); +} + +module.exports = addState(CreateButtons); diff --git a/client/src/components/list.jsx b/client/src/components/list.jsx index 98f18453..1d7a1c0c 100644 --- a/client/src/components/list.jsx +++ b/client/src/components/list.jsx @@ -4,7 +4,7 @@ const preact = require('preact'); const { stringSort } = require('./../utils'); const { ConstructAvatar } = require('./construct'); const actions = require('./../actions'); -const InstanceCreateForm = require('./instance.create.buttons'); +const JoinButtons = require('./join.buttons'); const Inventory = require('./inventory'); const idSort = stringSort('id'); @@ -16,19 +16,11 @@ const addState = connect( constructs, constructRename, team, - instanceList, mtxActive, } = state; - function sendInstanceJoin(instance) { - if (team.length) { - return ws.sendInstanceJoin(instance.id, team); - } - return false; - } - - function sendInstanceList() { - return ws.sendInstanceList(); + function sendInstancePractice() { + return ws.sendInstancePractice(); } function sendConstructAvatarReroll(id) { @@ -42,13 +34,11 @@ const addState = connect( return { constructs, - instanceList, mtxActive, constructRename, team, sendConstructRename, - sendInstanceJoin, - sendInstanceList, + sendInstancePractice, sendConstructAvatarReroll, }; }, @@ -79,51 +69,10 @@ function List(args) { clearMtxRename, setConstructRename, sendConstructRename, - sendInstanceJoin, - sendInstanceList, - instanceList, mtxActive, sendConstructAvatarReroll, } = args; - function listElements() { - if (!instanceList) return
...
; - - const instancePanels = instanceList.map(instance => { - function instanceClick() { - return sendInstanceJoin(instance); - } - - return ( - - {instance.name} - - ); - }); - - return ( - - ); - } - const constructPanels = constructs .filter(c => team.includes(c.id)) .sort(idSort) @@ -167,7 +116,7 @@ function List(args) { {constructPanels} - {listElements()} + ); } diff --git a/client/src/components/nav.jsx b/client/src/components/nav.jsx index b0c8fd7e..27421a4f 100644 --- a/client/src/components/nav.jsx +++ b/client/src/components/nav.jsx @@ -20,10 +20,6 @@ const addState = connect( return ws.sendInstanceState(instance.id); } - function sendInstanceList() { - return ws.sendInstanceList(); - } - return { account, instances, @@ -31,18 +27,9 @@ const addState = connect( game, ping, sendInstanceState, - sendInstanceList, }; }, function receiveDispatch(dispatch) { - function setTestGame(id) { - return dispatch(actions.setGame(testGame(id))); - } - - function setTestInstance(id) { - return dispatch(actions.setInstance(testInstance(id))); - } - function setNav(place) { dispatch(actions.setGame(null)); dispatch(actions.setInstance(null)); @@ -63,8 +50,6 @@ const addState = connect( } return { - setTestGame, - setTestInstance, setNav, hideNav, }; @@ -79,18 +64,12 @@ function Nav(args) { team, sendInstanceState, - sendInstanceList, - setTestGame, - setTestInstance, setNav, hideNav, } = args; function navTo(p) { - if (p === 'list') { - sendInstanceList(); - } return setNav(p); } diff --git a/client/src/events.jsx b/client/src/events.jsx index d15c5f19..a32251b0 100644 --- a/client/src/events.jsx +++ b/client/src/events.jsx @@ -40,11 +40,6 @@ function registerEvents(store) { store.dispatch(actions.setConstructs(constructs)); } - - function setInstanceList(list) { - store.dispatch(actions.setInstanceList(list)); - } - function setWs(ws) { store.dispatch(actions.setWs(ws)); } @@ -236,7 +231,6 @@ function registerEvents(store) { setNewConstruct, setGame, setInstance, - setInstanceList, setItemInfo, setPing, setShop, diff --git a/client/src/reducers.jsx b/client/src/reducers.jsx index f7979e6f..1a967c79 100644 --- a/client/src/reducers.jsx +++ b/client/src/reducers.jsx @@ -31,7 +31,6 @@ module.exports = { info: createReducer(null, 'SET_INFO'), instance: createReducer(null, 'SET_INSTANCE'), instances: createReducer([], 'SET_INSTANCES'), - instanceList: createReducer([], 'SET_INSTANCE_LIST'), itemEquip: createReducer(null, 'SET_ITEM_EQUIP'), itemInfo: createReducer({ combos: [], items: [] }, 'SET_ITEM_INFO'), itemUnequip: createReducer([], 'SET_ITEM_UNEQUIP'), diff --git a/client/src/socket.jsx b/client/src/socket.jsx index 8b22958f..39d7df3a 100644 --- a/client/src/socket.jsx +++ b/client/src/socket.jsx @@ -58,9 +58,6 @@ function createSocket(events) { send(['InstanceState', { instance_id: instanceId }]); } - function sendInstanceList() { - send(['InstanceList', {}]); } - function sendVboxAccept(instanceId, group, index) { send(['VboxAccept', { instance_id: instanceId, group, index }]); events.clearInstance(); @@ -107,12 +104,8 @@ function createSocket(events) { events.setActiveSkill(null); } - function sendInstanceJoin(instanceId, constructs) { - send(['InstanceJoin', { instance_id: instanceId, construct_ids: constructs }]); - } - - function sendInstanceNew(constructs, name, pve) { - send(['InstanceLobby', { construct_ids: constructs, name, pve }]); + function sendInstancePractice() { + send(['InstancePractice', {}]); } function sendInstanceReady(instanceId) { @@ -165,10 +158,6 @@ function createSocket(events) { events.setInstance(instance); } - function onOpenInstances(list) { - events.setInstanceList(list); - } - function onItemInfo(info) { events.setItemInfo(info); } @@ -194,7 +183,6 @@ function createSocket(events) { GameState: onGameState, InstanceState: onInstanceState, ItemInfo: onItemInfo, - OpenInstances: onOpenInstances, Pong: onPong, }; @@ -280,25 +268,29 @@ function createSocket(events) { return { sendAccountConstructs, sendAccountInstances, + sendGameState, sendGameReady, sendGameSkill, sendGameTarget, - sendInstanceJoin, - sendInstanceList, + sendInstanceReady, - sendInstanceNew, + sendInstancePractice, sendInstanceState, + sendVboxAccept, sendVboxApply, sendVboxReclaim, sendVboxCombine, sendVboxDiscard, sendVboxUnequip, + sendItemInfo, + sendMtxApply, sendMtxBuy, sendMtxConstructSpawn, + connect, }; } diff --git a/server/src/account.rs b/server/src/account.rs index 86149124..a42a3974 100644 --- a/server/src/account.rs +++ b/server/src/account.rs @@ -301,7 +301,8 @@ pub fn account_team(tx: &mut Transaction, account: &Account) -> Result Result) -> Result, Error> { + let query = " + UPDATE constructs + SET team = false + WHERE account = $1; + "; + + let updated = tx + .execute(query, &[&account.id, &ids])?; + + if updated > 3 { + warn!("team members >3 account={:?} count={:?}", account, updated); + } + + let query = " + UPDATE constructs + SET team = true + WHERE account = $1 + AND id in $2 + RETURNING data; + "; + + let updated = tx + .execute(query, &[&account.id, &ids])?; + + if updated != 3 { + return Err(format_err!("could not create team of 3 account={:?} updated={:?}", account, updated)); + } + + account_team(tx, account) +} + pub fn account_instances(tx: &mut Transaction, account: &Account) -> Result, Error> { let query = " SELECT data, id diff --git a/server/src/instance.rs b/server/src/instance.rs index 5f8e3651..0866b8ab 100644 --- a/server/src/instance.rs +++ b/server/src/instance.rs @@ -498,7 +498,7 @@ pub fn instance_create(tx: &mut Transaction, instance: Instance) -> Result Result<(), Error> { return Ok(()); } -pub fn instance_list(tx: &mut Transaction) -> Result, Error> { +pub fn _instance_list(tx: &mut Transaction) -> Result, Error> { let query = " SELECT data, id FROM instances - WHERE open = true AND finished = false; "; @@ -677,13 +676,16 @@ pub fn instance_practice(tx: &mut Transaction, account: &Account) -> Result Result { @@ -694,13 +696,15 @@ pub fn instance_pvp(tx: &mut Transaction, a: &Account, b: &Account) -> Result), InstanceState(Instance), Pong(()), @@ -56,8 +55,6 @@ enum RpcRequest { AccountShop {}, AccountConstructs {}, - InstanceList {}, - InstanceLobby { construct_ids: Vec, name: String, pve: bool, password: Option }, InstancePvp {}, InstancePractice {}, InstanceReady { instance_id: Uuid }, @@ -119,8 +116,6 @@ pub fn receive(data: Vec, db: &Db, begin: Instant, account: &Option RpcRequest::GameReady { id } => Ok(RpcMessage::GameState(game_ready(&mut tx, account, id)?)), - RpcRequest::InstanceList {} => - Ok(RpcMessage::OpenInstances(instance_list(&mut tx)?)), // RpcRequest::InstanceQueue {} => // Ok(RpcMessage::QueueState(instance_queue(&mut tx, account)?)), RpcRequest::InstancePractice {} =>