Ejemplo n.º 1
0
            public static int GetEstimatedSize(BackplaneMessage msg, bool skipOwner)
            {
                // this is only a rough size multiplied by two for getting a roughly sized buffer
                int size = 2; // two enums

                if (!skipOwner)
                {
                    size += msg.OwnerIdentity.Length * 4;
                }

                size += msg.Key?.Length * 4 ?? 0;
                size += msg.Region?.Length * 4 ?? 0;
                return(size * 2);
            }
Ejemplo n.º 2
0
        private static void SerializeMessage(MessageWriter writer, BackplaneMessage message, bool skipOwner)
        {
            if (!skipOwner)
            {
                writer.WriteInt(message.OwnerIdentity.Length);
                writer.WriteBytes(message.OwnerIdentity);
            }

            writer.WriteByte((byte)message.Action);
            switch (message.Action)
            {
            case Changed:
                writer.WriteByte((byte)message.ChangeAction);
                if (!string.IsNullOrEmpty(message.Region))
                {
                    writer.WriteByte(2);
                    writer.WriteString(message.Region);
                }
                else
                {
                    writer.WriteByte(1);
                }
                writer.WriteString(message.Key);

                break;

            case Removed:
                if (!string.IsNullOrEmpty(message.Region))
                {
                    writer.WriteByte(2);
                    writer.WriteString(message.Region);
                }
                else
                {
                    writer.WriteByte(1);
                }
                writer.WriteString(message.Key);

                break;

            case ClearRegion:
                writer.WriteString(message.Region);
                break;

            case Clear:
                break;
            }
        }
Ejemplo n.º 3
0
        private void PublishMessage(BackplaneMessage message)
        {
            var msg = message.Serialize();

            lock (this.messageLock)
            {
                if (message.Action == BackplaneAction.Clear)
                {
                    Interlocked.Exchange(ref this.skippedMessages, this.messages.Count);
                    this.messages.Clear();
                }

                if (!this.messages.Add(msg))
                {
                    Interlocked.Increment(ref this.skippedMessages);
                    if (this.logger.IsEnabled(LogLevel.Trace))
                    {
                        this.logger.LogTrace("Skipped duplicate message: {0}.", msg);
                    }
                }

                this.SendMessages();
            }
        }