public function subscribe(ClientSession $session, $topicName, callable $callback, $options = null)
{
$requestId = Utils::getUniqueId();
$options = $options ? (object) $options : (object) [];
$deferred = new Deferred();
$subscription = ["topic_name" => $topicName, "callback" => $callback, "request_id" => $requestId, "options" => $options, "deferred" => $deferred];
array_push($this->subscriptions, $subscription);
$subscribeMsg = new SubscribeMessage($requestId, $options, $topicName);
$session->sendMessage($subscribeMsg);
return $deferred->promise();
}