public function register(ClientSession $session, $procedureName, callable $callback, $options = null)
{
$futureResult = new Deferred();
$requestId = Utils::getUniqueId();
$options = isset($options) ? (object) $options : new \stdClass();
$registration = ["procedure_name" => $procedureName, "callback" => $callback, "request_id" => $requestId, 'options' => $options, 'futureResult' => $futureResult];
array_push($this->registrations, $registration);
$registerMsg = new RegisterMessage($requestId, $options, $procedureName);
$session->sendMessage($registerMsg);
return $futureResult->promise();
}