OCA\Richdocuments\Controller\SessionController::poll PHP Method

poll() public method

public poll ( $command, $args )
    public function poll($command, $args)
    {
        $response = new JSONResponse();
        try {
            $esId = isset($args['es_id']) ? $args['es_id'] : null;
            $session = $this->loadSession($esId);
            $memberId = isset($args['member_id']) ? $args['member_id'] : null;
            $member = $this->loadMember($memberId);
            $this->validateSession($session);
            switch ($command) {
                case 'sync_ops':
                    $seqHead = (string) isset($args['seq_head']) ? $args['seq_head'] : null;
                    if (!is_null($seqHead)) {
                        $ops = isset($args['client_ops']) ? $args['client_ops'] : [];
                        $op = new Db\Op();
                        $currentHead = $op->getHeadSeq($esId);
                        try {
                            $member->updateActivity($memberId);
                        } catch (\Exception $e) {
                            //Db error. Not critical
                        }
                        $response->setData($session->syncOps($memberId, $currentHead, $seqHead, $ops));
                        $inactiveMembers = $member->updateByTimeout($esId);
                        foreach ($inactiveMembers as $inactive) {
                            $op->removeCursor($esId, $inactive);
                            $op->removeMember($esId, $inactive);
                        }
                    } else {
                        // Error - no seq_head passed
                        throw new BadRequestException();
                    }
                    break;
                default:
                    $ex = new BadRequestException();
                    $ex->setBody(implode(',', $this->request->getParams()));
                    throw $ex;
            }
        } catch (BadRequestException $e) {
            $response->setStatus(Http::STATUS_BAD_REQUEST);
            $response->setData(['err' => 'bad request:[' . $e->getBody() . ']']);
        }
        return $response;
    }