public function processCall(ClientOracle $clientOracle, $payload, OutputStream $stream) { assert($payload != null); assert(mb_strlen($payload) != 0); try { $rpcRequest = RPC::decodeRequest($payload, $clientOracle); $this->onAfterRequestDeserialized($rpcRequest); RPC::invokeAndStreamResponse($rpcRequest, $clientOracle, $stream); } catch (RemoteException $e) { throw new SerializationException('An exception was sent from the client : ' . $e); } catch (IncompatibleRemoteServiceException $e) { error_log('A incompatibleRemoteServiceException was thrown while processing this call : ' . $e); RPC::streamResponseForFailure($clientOracle, $stream, $e); } }