using System; using System.Threading; using Wayne.ForecourtControl; using Wayne.ForecourtControl.Fusion; using Wayne.Lib; namespace TestRun { class Program { static NLog.Logger mainLogger = NLog.LogManager.LoadConfiguration("nlog.config").GetLogger("Main"); static string DEFAULT_FDC_SERVER_CONNECT_STRING = "Host=192.168.50.238,Port=4711,ClientId=101,ClientName=PetroChinaProxy,PortB=4711,PortC=4711"; static IForecourtControl forecourtControl; static void Main(string[] args) { Console.WriteLine("Hello World!"); var concreteFdcServerConnString = DEFAULT_FDC_SERVER_CONNECT_STRING.Replace("127.0.0.1", "127.0.0.1") .Replace("ClientId=101", "ClientId=" + "109"); forecourtControl = Wayne.ForecourtControl.Fusion.FUSIONFactory.CreateForecourtControl(0); forecourtControl.OnConnectionStateChange += forecourtControl_OnConnectionStateChange; forecourtControl.Connect(concreteFdcServerConnString); while (true) Console.ReadLine(); } static void forecourtControl_OnConnectionStateChange(object sender, ConnectionChangedEventArgs e) { mainLogger.Debug("forecourtControl_OnConnectionStateChange(), new state: " + e.ConnectionState); if (e.ConnectionState == Wayne.Lib.DeviceConnectionState.Disconnected) { Console.WriteLine("Disconnected to FC!"); foreach (var pump in forecourtControl.Pumps) { pump.OnFuellingStateChange -= FdcCommunicator_OnFuellingStateChange; pump.OnNozzleStateChange -= FdcCommunicator_OnNozzleStateChange; pump.OnEventOccured -= FdcCommunicator_OnEventOccured; } } else if (e.ConnectionState == Wayne.Lib.DeviceConnectionState.Connected) { var fc = forecourtControl as FUSIONForecourtControl; //fc.manager.ifsfManager.LogOnSend("pos119"); fc.manager.ifsfManager.GetDSPConfiguration((a, b) => { Console.Write("GetDSPConfiguration response"); }, 111, 111); // sometimes could not receive any notification from FDC server even attached the event handler, // suspect some underlying bug in communication layer, so here try sleep a while to avoid(probably) this. // Thread.Sleep(500); Console.WriteLine("Connected to FC!"); foreach (var pump in forecourtControl.Pumps) { pump.OnFuellingStateChange += FdcCommunicator_OnFuellingStateChange; pump.OnNozzleStateChange += FdcCommunicator_OnNozzleStateChange; pump.OnEventOccured += FdcCommunicator_OnEventOccured; } //forecourtControl.SetSiteOpenedAsync(true, (_, __) => { }, null); } } private static void FdcCommunicator_OnEventOccured(object sender, PumpEventOccuredEventArgs e) { Console.WriteLine("fdc on event occured: " + e.EventType); } private static void FdcCommunicator_OnNozzleStateChange(object sender, NozzleStateChangeEventArgs e) { var pump = sender as IPump; Console.WriteLine("fdc OnNozzleStateChange, pump: " + pump.Id + ", nozzle: " + e.Nozzle.Id + ", nozzle state: " + e.NozzleState); } private static void FdcCommunicator_OnFuellingStateChange(object sender, FuellingStateChangeEventArgs e) { var pump = sender as IPump; Console.WriteLine("fdc OnFuellingStateChange, pump: " + pump.Id + ", nozzle: " + e.Fuelling.Nozzle.Id + ", nozzle state: " + e.State + ", amt: " + e.Fuelling.Amount + ", qty: " + e.Fuelling.Quantity + ", price: " + e.Fuelling.Price + ", seqNo.: " + e.Fuelling.FuellingSequenceNumber); } } }