/// <summary>
        /// Publishes the status to the cluster.
        /// </summary>
        public void Publish()
        {
            // Enqueue into samplers
            SamplerMPSIn.CumulativeDelta(Service.Monitoring.MessagesIncoming);
            SamplerMPSOut.CumulativeDelta(Service.Monitoring.MessagesOutgoing);

            // Push the time and static values
            this.Time    = DateTime.UtcNow;
            this.Node    = EmitterStatus.NodeIdentifier.ToString();
            this.Host    = EmitterStatus.Address;
            this.Machine = EmitterStatus.MachineName;
            this.CPU     = Math.Round(NetStat.AverageCpuUsage.Value, 2);
            this.Memory  = Math.Round(NetStat.AverageWorkingSet.Value, 2);
            this.Uptime  = NetStat.Uptime;

            // Set the network info
            this.Network.Connections        = Service.Clients.Count;
            this.Network.AveragePPSIncoming = Math.Round(NetStat.AveragePPSIncoming.Value, 2);
            this.Network.AveragePPSOutgoing = Math.Round(NetStat.AveragePPSOutgoing.Value, 2);
            this.Network.AverageBPSIncoming = Math.Round(NetStat.AverageBPSIncoming.Value, 2);
            this.Network.AverageBPSOutgoing = Math.Round(NetStat.AverageBPSOutgoing.Value, 2);
            this.Network.AverageMPSIncoming = Math.Round(SamplerMPSIn.Sum(), 2);
            this.Network.AverageMPSOutgoing = Math.Round(SamplerMPSOut.Sum(), 2);
            this.Network.Compression        = Math.Round(NetStat.Compression.Value, 2);

            // Create the message
            var message = Encoding.UTF8.GetBytes(
                JsonConvert.SerializeObject(this)
                ).AsSegment();

            // Prepare options
            var contract = SecurityLicense.Current.Contract;
            var channel  = "cluster/" + this.Host + "/";

            // Get the channel hash for query
            EmitterChannel info;

            if (!EmitterChannel.TryParse(channel, false, out info))
            {
                return;
            }

            // Publish the message in the cluster, don't need to store it as it might slow everything down
            Dispatcher.Publish(contract, info.Target, channel, message, 60);
        }