143 lines · 5.2 KB · C#
RawDownload
//******************************************************************************************************//  Program.cs - Gbtc////  Copyright © 2012, Grid Protection Alliance.  All Rights Reserved.////  Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See//  the NOTICE file distributed with this work for additional information regarding copyright ownership.//  The GPA licenses this file to you under the MIT License (MIT), the "License"; you may//  not use this file except in compliance with the License. You may obtain a copy of the License at:////      http://www.opensource.org/licenses/MIT////  Unless agreed to in writing, the subject software distributed under the License is distributed on an//  "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the//  License for the specific language governing permissions and limitations.////  Code Modification History://  ----------------------------------------------------------------------------------------------------//  06/30/2011 - J. Ritchie Carroll//       Generated original version of source code.//  12/13/2012 - Starlynn Danyelle Gilliam//       Modified Header.////****************************************************************************************************** using System;using System.Collections.Generic;using System.Threading;using GSF;using GSF.TimeSeries;using GSF.TimeSeries.Transport;using Random = GSF.Security.Cryptography.Random; namespace DataPublisherTest{    class Program    {        static readonly DataPublisher publisher = new DataPublisher();        static Ticks lastDisplayTime;        static readonly object displayLock = new object();         private const int MeasurementCount = 200;         static void Main(string[] args)        {            // Attach to publisher events            publisher.StatusMessage += publisher_StatusMessage;            publisher.ProcessException += publisher_ProcessException;            publisher.ClientConnected += publisher_ClientConnected;             //using (AdoDataConnection database = new AdoDataConnection("systemSettings"))            //{            //    MeasurementKey.EstablishDefaultCache(database.Connection, database.AdapterType);             // Initialize publisher            //publisher.DataMember = "ActiveMeasurements";            //publisher.DataSource = database.RetrieveDataSet("SELECT * FROM ActiveMeasurement");            publisher.Name = "dataPublisher";            publisher.UseBaseTimeOffsets = true;            publisher.AllowPayloadCompression = true;            publisher.AllowSynchronizedSubscription = true;            publisher.ConnectionString = "commandChannel={port=9898}";            //publisher.UseZeroMQChannel = true;            //publisher.ConnectionString = "commandChannel={server=tcp://*:9898}";            publisher.Initialize();             // Start publisher            publisher.Start();             ThreadPool.QueueUserWorkItem(ProcessMeasurements);             Console.ReadLine();             publisher.Stop();            //}             publisher.StatusMessage -= publisher_StatusMessage;            publisher.ProcessException -= publisher_ProcessException;        }         static void publisher_ProcessException(object sender, EventArgs<Exception> e)        {            lock (displayLock)            {                Console.ForegroundColor = ConsoleColor.Red;                Console.WriteLine("EXCEPTION: " + e.Argument.Message);                Console.ResetColor();            }        }         static void publisher_StatusMessage(object sender, EventArgs<string> e)        {            lock (displayLock)            {                Console.WriteLine(e.Argument);            }        }         static void publisher_ClientConnected(object sender, EventArgs<Guid, string, string> e)        {            ThreadPool.QueueUserWorkItem(ShowConnectedClients);        }         static void ShowConnectedClients(object state)        {            Ticks displayTime = DateTime.UtcNow.Ticks;             // Don't show client enumeration more than every two seconds...            if ((displayTime - lastDisplayTime).ToSeconds() > 2.0D)            {                lastDisplayTime = displayTime;                publisher.EnumerateClients();            }        }         static void ProcessMeasurements(object state)        {            while (true)            {                List<Measurement> measurements = new List<Measurement>();                 Measurement measurement;                 for (int i = 1; i <= MeasurementCount; i++)                {                    measurement = new Measurement                    {                        //Key = MeasurementKey.LookUpOrCreate("PPA", (uint)i),                        Metadata = MeasurementKey.LookUpOrCreate("DEVARCHIVE", (uint)i).Metadata,                        Value = Random.Between(-65535.0D, 65536.0D),                        Timestamp = DateTime.UtcNow.Ticks                    };                     measurements.Add(measurement);                }                 publisher.QueueMeasurementsForProcessing(measurements);                 Thread.Sleep(33);            }        }    }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t