Пример #1
0
 protected void NtfyMessage(ScalableMessage message)
 {
     if (message.From == ID)
     {
         CompleteMessage(message);
     }
     else
     {
         onMessageReceived?.Invoke(message);
     }
 }
Пример #2
0
        public override async Task SendMessage(ScalableMessage msg)
        {
            await           initTask;
            List <TableRow> servers = new List <TableRow>();
            await           db["__queues"].RangeRetrieve(name, nameEnd, _servers => {
                lock (servers)
                {
                    servers.AddRange(_servers);
                }
                return(true);
            });

            byte[] buffy = new byte[1 + 16 + 16 + 4 + msg.Message.Length];
            buffy[0] = 4;
            Buffer.BlockCopy(id.ToByteArray(), 0, buffy, 1, 16);
            Buffer.BlockCopy(msg.ID.ToByteArray(), 0, buffy, 1 + 16, 16);
            Buffer.BlockCopy(BitConverter.GetBytes(msg.Message.Length), 0, buffy, 1 + 16 + 16, 4);
            Buffer.BlockCopy(msg.Message, 0, buffy, 1 + 16 + 16 + 4, msg.Message.Length);
            foreach (TableRow boat in servers)
            {
                await mclient.SendAsync(buffy, buffy.Length, boat["Hostname"] as string, (int)boat["port"]);
            }
            var tsktsktsktsk = new TaskCompletionSource <bool>();

            lock (pendingMessages)
            {
                pendingMessages.Add(msg.ID, tsktsktsktsk);
            }
            await Task.WhenAny(tsktsktsktsk.Task, Task.Delay(timeout));

            lock (pendingMessages)
            {
                pendingMessages.Remove(msg.ID);
            }
            if (!tsktsktsktsk.Task.IsCompleted)
            {
            }
        }
Пример #3
0
 /// <summary>
 /// Sends a message to all members of the queue.
 /// </summary>
 /// <param name="msg"></param>
 /// <returns></returns>
 public abstract Task SendMessage(ScalableMessage msg);
Пример #4
0
 /// <summary>
 /// Notifies the cluster that a message has been successfully processed.
 /// </summary>
 /// <param name="message"></param>
 public abstract Task CompleteMessage(ScalableMessage message);
Пример #5
0
 public override async Task CompleteMessage(ScalableMessage message)
 {
     throw new NotImplementedException();
 }