module mars.protoupd; import mars.client; import mars.msg; import mars.server; /** Handle a request for update coming form the client, originating from on optimistic update. Params: client = the mars client, the sender. socket = socket like object, as a transport. */ void protoOptUpdate(S)(MarsClient* client, S socket) { auto state = RequestState.executed; auto req = socket.binaryAs!OptUpdateReq; if( req.tableIndex < 0 || req.tableIndex > marsServer.tables.length ){ state = RequestState.rejectedAsWrongParameter; } if( state == state.init ){ client.vueUpdateRecord(req.tableIndex, req.keys, req.record, state); } final switch(state) with(RequestState){ case rejectedAsWrongParameter: assert(false); case internalServerError: case rejectedAsDecodingFailed: case rejectedAsNotAuthorised: case rejectedAsPGSqlError: socket.sendReply(req, OptUpdateRep(state)); break; case executed: socket.sendReply(req, OptUpdateRep(state)); break; } }