/// <summary>
 /// Callback for channel subscriptions.
 /// </summary>
 /// <param name="counterSampleMessage">The counter sample message.</param>
 private void OnCounterSample(CounterSampleMessage counterSampleMessage)
 {
     if (Interlocked.Read(ref state) == 1L)
     {
         CounterSampleCollection samples;
         if (!sampleDictionary.TryGetValue(counterSampleMessage.CounterName, out samples))
         {
             samples = new CounterSampleCollection(counterSampleMessage.CounterName);
             sampleDictionary.Add(counterSampleMessage.CounterName, samples);
         }
         samples.Add(counterSampleMessage.CounterSample);
         sampleCount++;
     }
 }
Exemple #2
0
 /// <summary>
 /// The <see cref="E:ExitGames.Net.Sockets.ISocketReceiver.Receive"/> callback.
 /// </summary>
 /// <param name="sender">The sender.</param>
 /// <param name="e">The event args.</param>
 private void OnReceive(object sender, SocketReceiveEventArgs e)
 {
     try
     {
         DateTime receiveTime = DateTime.UtcNow;
         if (log.IsDebugEnabled)
         {
             log.DebugFormat("Received data from {0}.", new object[] { e.RemoteEndPoint });
         }
         if ((OnCounterDataReceived != null) || Channel.HasSubscriptions)
         {
             using (MemoryStream input = new MemoryStream(e.Buffer, e.Offset, e.BytesReceived))
             {
                 BinaryReader binaryReader = new BinaryReader(input);
                 binaryReader.PeekChar();
                 long     dateData   = binaryReader.ReadInt64();
                 DateTime senderTime = DateTime.FromBinary(dateData);
                 int      count      = binaryReader.ReadInt32();
                 string   senderId   = binaryReader.ReadString();
                 CounterSampleCollection[] counterSamples = new CounterSampleCollection[count];
                 for (int i = 0; i < count; i++)
                 {
                     counterSamples[i] = CounterSampleCollection.Deserialize(binaryReader);
                 }
                 CounterSamplesPackage counterSamle = new CounterSamplesPackage(e.RemoteEndPoint, senderId, senderTime, receiveTime, counterSamples);
                 if (OnCounterDataReceived != null)
                 {
                     OnCounterDataReceived(this, counterSamle);
                 }
                 Channel.Publish(counterSamle);
             }
         }
     }
     catch (ThreadAbortException)
     {
         throw;
     }
     catch (OutOfMemoryException)
     {
         throw;
     }
     catch (Exception exception)
     {
         if (log.IsErrorEnabled)
         {
             log.Error("Error during receive.", exception);
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// Deserializes a stream of <see cref="T:ExitGames.Diagnostics.Counter.CounterSample"/>s.
        /// </summary>
        /// <param name="binaryReader">The reader wrapping a stream.</param>
        /// <returns>A new <see cref="T:ExitGames.Diagnostics.Monitoring.CounterSampleCollection"/>.</returns>
        public static CounterSampleCollection Deserialize(BinaryReader binaryReader)
        {
            string name  = binaryReader.ReadString();
            short  count = binaryReader.ReadInt16();
            CounterSampleCollection samples = new CounterSampleCollection(name);

            for (int i = 0; i < count; i++)
            {
                long     dateData  = binaryReader.ReadInt64();
                DateTime timestamp = DateTime.FromBinary(dateData);
                float    value     = binaryReader.ReadSingle();
                samples.Add(new CounterSample(timestamp, value));
            }
            return(samples);
        }
 /// <summary>
 /// Sends samples to the socket sender.
 /// </summary>
 private void Publish()
 {
     if (!socketSender.Connected)
     {
         RaiseOnDisconnetedEvent();
     }
     if (sampleCount > 0)
     {
         if (log.IsDebugEnabled)
         {
             log.DebugFormat("Publishing counter data.", new object[0]);
         }
         CounterSampleCollection[] array = new CounterSampleCollection[sampleDictionary.Count];
         sampleDictionary.Values.CopyTo(array, 0);
         sampleDictionary.Clear();
         using (MemoryStream output = new MemoryStream())
         {
             using (BinaryWriter binaryWriter = new BinaryWriter(output))
             {
                 for (int i = 0; i < array.Length; i += MaxQueueLength)
                 {
                     int num2 = array.Length - i;
                     if (num2 > MaxQueueLength)
                     {
                         num2 = MaxQueueLength;
                     }
                     binaryWriter.Write(0xffee);
                     binaryWriter.Write(DateTime.UtcNow.ToBinary());
                     binaryWriter.Write(num2);
                     binaryWriter.Write(senderId);
                     for (int j = i; j < (i + num2); j++)
                     {
                         array[j].Serialize(binaryWriter);
                     }
                     byte[] buffer = output.ToArray();
                     Add(buffer);
                     output.Position = 0;
                 }
             }
         }
         fiber.Enqueue(Send);
     }
 }