public bool Emit(string Event, object Object, Ackcall ack)
        {
            Log($"Emit with ack invoked, Event {Event}, Object {Object}, ACK {ack.GetMethodInfo().Name}.");
            var count       = Interlocked.Increment(ref _counter);
            var eventObject = new Dictionary <string, object> {
                { "event", Event }, { "data", Object }, { "cid", count }
            };

            _acks.Add(count, GetAckObject(Event, ack));
            var json = _options.Serializer.Serialize(eventObject);

            return(_socket.Send(json));
        }
        public bool Unsubscribe(string channel, Ackcall ack)
        {
            Log($"Unsubscribe with ACK invoked, Channel {channel}, ACK {ack.GetMethodInfo().Name}.");
            var count           = Interlocked.Increment(ref _counter);
            var subscribeObject = new Dictionary <string, object>
            {
                { "event", "#unsubscribe" },
                { "data", channel },
                { "cid", count }
            };

            _acks.Add(count, GetAckObject(channel, ack));
            var json = _options.Serializer.Serialize(subscribeObject);

            return(_socket.Send(json));
        }
        public bool Publish(string channel, object data, Ackcall ack)
        {
            Log($"Publish with ACK invoked, Channel {channel}, Data {data}, ACK {ack.GetMethodInfo().Name}.");
            var count         = Interlocked.Increment(ref _counter);
            var publishObject = new Dictionary <string, object>
            {
                { "event", "#publish" },
                { "data", new Dictionary <string, object> {
                      { "channel", channel }, { "data", data }
                  } },
                { "cid", count }
            };

            _acks.Add(count, GetAckObject(channel, ack));
            var json = _options.Serializer.Serialize(publishObject);

            return(_socket.Send(json));
        }