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);
     }
 }