Пример #1
0
        public void Ack(long batchId)
        {
            WaitClientRunning();
            if (!_running)
            {
                return;
            }

            var ca = new ClientAck()
            {
                Destination = _clientIdentity.Destination,
                ClientId    = _clientIdentity.ClientId.ToString(),
                BatchId     = batchId
            };

            var pack = new Packet()
            {
                Type = PacketType.Clientack,
                Body = ca.ToByteString()
            }.ToByteArray();

            try
            {
                WriteWithHeader(pack);
            }
            catch (IOException e)
            {
                throw new CanalClientException(e.Message, e);
            }
        }
        public ClientAck CreateClientAck(Message message)
        {
            // Receivers involved in the ClientAck
            List <string> receivers;

            if (message.Type == MessageTypeEnum.Broadcast)
            {
                // Everyone except the sender
                receivers = new List <string>(_userHandler.GetActiveSessions().Select <Session, string>(sess => sess.Username));
                receivers.Remove(message.Sender);
            }
            else
            {
                // Only the receiver
                receivers = new List <string>()
                {
                    message.Receiver
                };
            }

            ClientAck clientAck = new ClientAck(Guid.NewGuid().ToString(), DateTime.UtcNow, message, receivers);

            _clientAcks.TryAdd(clientAck.ClientAckId, clientAck);

            return(clientAck);
        }
Пример #3
0
        /// <summary>
        /// Ack has received data.
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        public async Task AckAsync(long batchId)
        {
            ValidateState(ConnectionState.Subscribed, nameof(AckAsync));

            var ca = new ClientAck()
            {
                Destination = _options.Destination,
                ClientId    = _options.ClientId,
                BatchId     = batchId
            };

            var pack = new Packet()
            {
                Type = PacketType.Clientack,
                Body = ca.ToByteString()
            }.ToByteArray();

            await _client.WritePacketAsync(pack);

            _logger.LogDebug($"Ack {batchId} success.");
        }