FUSIONPump.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Threading;
  6. using Wayne.Lib;
  7. using Wayne.FDCPOSLibrary;
  8. namespace Wayne.ForecourtControl.Fusion
  9. {
  10. public class FUSIONPump : IPumpEx, IDisposable
  11. {
  12. // Fields
  13. private bool blocked;
  14. private bool capFuelGradeSelected;
  15. private bool capNozzleDetection;
  16. private bool capSetLight;
  17. private bool capSuspendFuelling;
  18. private bool connected;
  19. private IFuelling currentFuelling;
  20. private string entitySubType;
  21. private bool fuelGradeSelected;
  22. private List<IFuelling> fuellingList;
  23. private FUSIONManager manager;
  24. private int nfsPumpSymbol;
  25. private List<INozzle> nozzles;
  26. private bool open;
  27. private IIdentifiableEntity parerentDevice;
  28. private PriceGroup priceGroup;
  29. private int pumpId;
  30. private int reservedBy;
  31. private Timer runningFuellingDataTimer;
  32. private bool _runningFuellingUpdates;
  33. private PumpState state;
  34. private TankLevelSwitchStatus tankLevelSwitchStatus;
  35. // Events
  36. public event EventHandler<PumpEventOccuredEventArgs> OnEventOccured;
  37. public event EventHandler<FuellingDataChangeEventArgs> OnFuellingDataChange;
  38. public event EventHandler<FuellingStateChangeEventArgs> OnFuellingStateChange;
  39. public event EventHandler<NozzleStateChangeEventArgs> OnNozzleStateChange;
  40. public event EventHandler<PumpStateChangeEventArgs> OnStateChange;
  41. public event EventHandler<TankLevelSwitchStatusChangeEventArgs> OnTankLevelSwitchStatusChange;
  42. public event EventHandler<FuelModeChangeEventArgs> OnFuelModeChange;
  43. // Methods
  44. public FUSIONPump(FUSIONManager manager)
  45. {
  46. this.manager = manager;
  47. this.fuellingList = new List<IFuelling>();
  48. this.nozzles = new List<INozzle>();
  49. this.currentFuelling = new FUSIONFuelling(manager, this);
  50. }
  51. public void AuthorizeAsync(IAuthorizeParameters authorizeParams, EventHandler<AsyncCompletedEventArgs<long>> requestCompleted, object userToken)
  52. {
  53. //this.CheckDisposed();
  54. //if (authorizeParams == null)
  55. //{
  56. // throw new ArgumentException("Must supply a valid IAuthorizeParams object");
  57. //}
  58. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs<long>>(this, requestCompleted, userToken);
  59. //this.SendAuthorizationRequest(0xcd, operation.Id, authorizeParams);
  60. while (this.manager.forecourtControl.fuelPriceReserved)
  61. {
  62. Thread.Sleep(200);
  63. Trace.WriteLine(String.Format("FUSIONPump.AuthorizeAsync: pumpId={0} - fuel price running, wait ...", this.realId));
  64. }
  65. int transactionId = 0; // is generated on the server side // ++FUSIONFuelling.transactionId;
  66. FUSIONFuelling currentFuelling = null;
  67. currentFuelling = (FUSIONFuelling)(CurrentFuelling);
  68. currentFuelling.WritableFuellingSequenceNumber = 0;
  69. currentFuelling.WritableAuthorizationId = 0;
  70. currentFuelling.WritablePresetType = authorizeParams.PresetType;
  71. currentFuelling.WritablePresetValue = authorizeParams.PresetValue;
  72. //FG, OCT-13-10, Add PayType to show outdoor payment type on FM
  73. currentFuelling.PayType = authorizeParams.PayType;
  74. Trace.WriteLine(String.Format("FUSIONPump.AuthorizeAsync: pumpId={0}, presetAmount=[{1}, reservingDeviceId={2}, fuellingType={3}", this.realId, currentFuelling.PresetValue, currentFuelling.ReservingDeviceId, currentFuelling.Type));
  75. this.manager.ifsfManager.AuthoriseFuelPoint(this.realId, transactionId, currentFuelling.Type, currentFuelling.ReservingDeviceId, authorizeParams, requestCompleted, userToken, this);
  76. }
  77. public void AuthorizeUpdateAsync(IAuthorizeParameters authorizeParams, EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  78. {
  79. //this.CheckDisposed();
  80. //if (authorizeParams == null)
  81. //{
  82. // throw new ArgumentException("Must supply a valid IAuthorizeParams object");
  83. //}
  84. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, requestCompleted, userToken);
  85. //this.SendAuthorizationRequest(0xd5, operation.Id, authorizeParams);
  86. }
  87. private void CheckDisposed()
  88. {
  89. if (this.manager == null)
  90. {
  91. throw new ObjectDisposedException("", "The pump object is not available anymore.");
  92. }
  93. }
  94. public void Dispose()
  95. {
  96. //if (this.runningFuellingDataTimer != null)
  97. //{
  98. // this.runningFuellingDataTimer.Dispose();
  99. //}
  100. this.manager = null;
  101. foreach (FUSIONNozzle nozzle in this.nozzles)
  102. {
  103. nozzle.Dispose();
  104. }
  105. foreach (FUSIONFuelling fuelling in this.fuellingList)
  106. {
  107. fuelling.Dispose();
  108. }
  109. ((FUSIONFuelling)this.currentFuelling).Dispose();
  110. }
  111. internal void FireFuellingDataChange(IFuelling fuelling, decimal amount, decimal quantity)
  112. {
  113. if (this.OnFuellingDataChange != null)
  114. {
  115. this.OnFuellingDataChange.BeginInvoke(this, new FuellingDataChangeEventArgs(fuelling, amount, quantity), null, null);
  116. }
  117. }
  118. internal void FireFuellingStateChange(IFuelling fuelling, FuellingState state)
  119. {
  120. if (this.OnFuellingStateChange != null)
  121. {
  122. this.OnFuellingStateChange.BeginInvoke(this, new FuellingStateChangeEventArgs(fuelling, state), null, null);
  123. }
  124. }
  125. internal void FireNozzleStateChange(INozzle nozzle, NozzleState nozzleState)
  126. {
  127. if (this.OnNozzleStateChange != null)
  128. {
  129. this.OnNozzleStateChange.BeginInvoke(this, new NozzleStateChangeEventArgs(nozzle, nozzleState), null, null);
  130. }
  131. }
  132. internal void FirePumpEventOccured(PumpEventType pumpEventType)
  133. {
  134. if (this.OnEventOccured != null)
  135. {
  136. this.OnEventOccured.BeginInvoke(this, new PumpEventOccuredEventArgs(pumpEventType), null, null);
  137. }
  138. }
  139. internal void FireFuelModeChange(int mode)
  140. {
  141. if (this.OnFuelModeChange != null)
  142. {
  143. this.OnFuelModeChange.BeginInvoke(this, new FuelModeChangeEventArgs(this, mode), null, null);
  144. }
  145. }
  146. private void PerformStopPump(EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  147. {
  148. //FUSIONAsyncOperation<ushort, AsyncCompletedEventArgs> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, requestCompleted, userToken);
  149. //Function function = new Function(0xc9, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x17, PrimitiveType.Byte, this.pumpId) });
  150. //this.manager.Send(function);
  151. //AsyncCompletedEventArgs resultEventArgs = new AsyncCompletedEventArgs(true, operation.UserToken);
  152. //operation.Complete(resultEventArgs);
  153. this.manager.ifsfManager.TerminateFuelling(this.realId, requestCompleted, userToken, this);
  154. }
  155. public void ReserveAsync(FuellingType fuellingType, byte DeviceId, EventHandler<AsyncCompletedEventArgs> reservedCompleted, object userToken)
  156. {
  157. //this.CheckDisposed();
  158. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, reservedCompleted, userToken);
  159. //Function function = new Function(0xcc, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.pumpId), new PrimitiveParameter(5, PrimitiveType.Byte, DeviceId), new PrimitiveParameter(7, PrimitiveType.Int16, NfsConvert.DecodeFillingType(fuellingType)) });
  160. //this.manager.Send(function);
  161. FUSIONFuelling currentFuelling = null;
  162. currentFuelling = (FUSIONFuelling)(CurrentFuelling);
  163. Trace.WriteLine(String.Format("FUSIONPump.ReserveAsync: pumpId={0}, reservingDeviceId={1}, fuellingType={2}", this.realId, currentFuelling.ReservingDeviceId, currentFuelling.Type));
  164. if (currentFuelling.Type == fuellingType && currentFuelling.ReservingDeviceId == DeviceId && reservedCompleted != null)
  165. {
  166. Trace.WriteLine(String.Format("FUSIONPump.ReserveAsync: pumpId={0}, reservingDeviceId={1}, fuellingType={2} ALREADY RESERVED by the same DeviceId!", this.realId, currentFuelling.ReservingDeviceId, currentFuelling.Type));
  167. reservedCompleted.BeginInvoke(this, new AsyncCompletedEventArgs(true, userToken), null, null);
  168. }
  169. else
  170. {
  171. currentFuelling.WritableType = fuellingType;
  172. currentFuelling.WritableReservingDeviceId = DeviceId;
  173. this.manager.ifsfManager.ReserveFuelPoint(this.realId, reservedCompleted, userToken, this);
  174. }
  175. //if (reservedCompleted != null)
  176. // reservedCompleted.Invoke(this, new AsyncCompletedEventArgs(true, userToken));
  177. }
  178. public void ResumeAsync(EventHandler<AsyncCompletedEventArgs> resumeCompleted, object userToken)
  179. {
  180. //this.CheckDisposed();
  181. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, resumeCompleted, userToken);
  182. //this.manager.Send(new Function(0xcb, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.Id) }));
  183. this.manager.ifsfManager.ResumeFuelling(this.realId, resumeCompleted, userToken, this);
  184. //if (resumeCompleted != null)
  185. // resumeCompleted.Invoke(this, new AsyncCompletedEventArgs(true, userToken));
  186. }
  187. private void RunningFuellingTimerProc(object state)
  188. {
  189. if (this.RunningFuellingUpdates && (this.manager != null))
  190. {
  191. this.manager.RequestFillingData(this.pumpId, true);
  192. }
  193. }
  194. private void SendAuthorizationRequest(ushort fid, int sequenceNumber, IAuthorizeParameters authorizeParams)
  195. {
  196. //this.CheckDisposed();
  197. //Function function = new Function(fid, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, sequenceNumber), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.pumpId), new PrimitiveParameter(0x16, PrimitiveType.Byte, NfsConvert.DecodePresetType(authorizeParams.PresetType)), new PrimitiveParameter(0x10, PrimitiveType.Decimal, authorizeParams.PresetValue), new PrimitiveParameter(0x27, PrimitiveType.Byte, NfsConvert.DecodePriceGroup(authorizeParams.PriceGroup)), new PrimitiveParameter(0x25, PrimitiveType.Byte, 0), new PrimitiveParameter(120, PrimitiveType.Byte, Convert.ToInt32(authorizeParams.LockToReleaseClient)) });
  198. //ArrayParameter parameter = new ArrayParameter(14);
  199. //for (int i = 0; i < authorizeParams.AllowedFuelGrade.Count; i++)
  200. //{
  201. // if (!authorizeParams.AllowedFuelGrade[i])
  202. // {
  203. // parameter.Add(new PrimitiveParameter(0x1c, PrimitiveType.Byte, i));
  204. // }
  205. //}
  206. //function.Add(parameter);
  207. //this.manager.Send(function);
  208. }
  209. public void SetBlockedAsync(bool blocked, EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  210. {
  211. //if (blocked)
  212. // this.manager.ifsfManager.LockNozzle(this.Id, -1, requestCompleted, userToken);
  213. //else
  214. // this.manager.ifsfManager.UnlockNozzle(this.Id, -1, requestCompleted, userToken);
  215. if (blocked)
  216. this.manager.ifsfManager.CloseDevice(this.realId, requestCompleted, userToken, this);
  217. else
  218. this.manager.ifsfManager.OpenDevice(this.realId, requestCompleted, userToken, this);
  219. //if (requestCompleted != null)
  220. // requestCompleted.Invoke(this, new AsyncCompletedEventArgs(true, userToken));
  221. }
  222. public void SetPriceGroupAsync(PriceGroup priceGroup, EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  223. {
  224. //this.CheckDisposed();
  225. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, requestCompleted, userToken);
  226. //Function function = new Function(0xd6, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.pumpId), new PrimitiveParameter(0x27, PrimitiveType.Byte, NfsConvert.DecodePriceGroup(priceGroup)) });
  227. //this.manager.Send(function);
  228. if (this.manager.forecourtControl.fuelPriceReserved)
  229. this.manager.ifsfManager.ChangeFuelModeAdd(this.manager.forecourtControl.srChangeMode, this.realId, (int)priceGroup, requestCompleted, userToken, this);
  230. //this.manager.ifsfManager.ChangeFuelMode(this.Id, (int)priceGroup, requestCompleted, userToken);
  231. else
  232. this.manager.ifsfManager.ChangeFuelMode(this.realId, (int)priceGroup, requestCompleted, userToken, this);
  233. }
  234. public void SignalEventAsync(PumpEventType eventType, EventHandler<AsyncCompletedEventArgs> signalEventCompleted, object userToken)
  235. {
  236. //this.CheckDisposed();
  237. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, signalEventCompleted, userToken);
  238. //Function function = new Function(0xd8, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.Id), new PrimitiveParameter(0x7a, PrimitiveType.UInt16, eventType) });
  239. //this.manager.Send(function);
  240. }
  241. public void StopAsync(EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  242. {
  243. this.CheckDisposed();
  244. this.PerformStopPump(requestCompleted, userToken);
  245. }
  246. public void SuspendAsync(EventHandler<AsyncCompletedEventArgs> suspendCompleted, object userToken)
  247. {
  248. this.CheckDisposed();
  249. // FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, suspendCompleted, userToken);
  250. // this.manager.Send(new Function(0xca, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.Id) }));
  251. this.manager.ifsfManager.SuspendFuelling(this.realId, suspendCompleted, userToken, this);
  252. }
  253. public override string ToString()
  254. {
  255. return this.ToString("", CultureInfo.InvariantCulture);
  256. }
  257. public string ToString(IFormatProvider provider)
  258. {
  259. return this.ToString("", provider);
  260. }
  261. public string ToString(string format)
  262. {
  263. return this.ToString(format, CultureInfo.InvariantCulture);
  264. }
  265. public string ToString(string format, IFormatProvider provider)
  266. {
  267. return ("Pump DeviceId=" + this.pumpId.ToString(format, provider));
  268. }
  269. public void UnauthorizeAsync(EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  270. {
  271. this.CheckDisposed();
  272. this.PerformStopPump(requestCompleted, userToken);
  273. }
  274. public void UnreserveAsync(EventHandler<AsyncCompletedEventArgs> requestCompleted, object userToken)
  275. {
  276. //this.CheckDisposed();
  277. //FUSIONAsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, requestCompleted, userToken);
  278. //Function function = new Function(210, ParserDomain.FillingServer, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(0x17, PrimitiveType.Byte, this.pumpId) });
  279. //this.manager.Send(function);
  280. FUSIONFuelling currentFuelling = null;
  281. currentFuelling = (FUSIONFuelling)(CurrentFuelling);
  282. currentFuelling.WritableReservingDeviceId = 0;
  283. Trace.WriteLine(String.Format("FUSIONPump.UnreserveAsync: pumpId={0}, reservingDeviceId={1}, fuellingType={2}", this.realId, currentFuelling.ReservingDeviceId, currentFuelling.Type));
  284. this.manager.ifsfManager.FreeFuelPoint(this.realId, requestCompleted, userToken, this);
  285. //if (requestCompleted != null)
  286. // requestCompleted.Invoke(this, new AsyncCompletedEventArgs(true, userToken));
  287. }
  288. public PumpState convertPumpState(LogicalDeviceState fdcState)
  289. {
  290. if (fdcState == LogicalDeviceState.FDC_REQUESTED) return PumpState.Authorized;
  291. else if (fdcState == LogicalDeviceState.FDC_AUTHORISED) return PumpState.Authorized;
  292. else if (fdcState == LogicalDeviceState.FDC_CALLING) return PumpState.Calling;
  293. //else if (fdcState == LogicalDeviceState.FDC_INACTIVATED) return PumpState.Closed;
  294. else if (fdcState == LogicalDeviceState.FDC_DISABLED) return PumpState.Closed;
  295. else if (fdcState == LogicalDeviceState.FDC_CLOSED) return PumpState.Closed;
  296. else if (fdcState == LogicalDeviceState.FDC_FUELLING) return PumpState.Fuelling;
  297. else if (fdcState == LogicalDeviceState.FDC_STARTED) return PumpState.Fuelling;
  298. else if (fdcState == LogicalDeviceState.FDC_READY) return PumpState.Idle;
  299. else if (fdcState == LogicalDeviceState.FDC_OUTOFORDER) return PumpState.Inoperative;
  300. else if (fdcState == LogicalDeviceState.FDC_OFFLINE) return PumpState.Inoperative;
  301. else if (fdcState == LogicalDeviceState.FDC_SUSPENDED) return PumpState.Suspended;
  302. else if (fdcState == LogicalDeviceState.FDC_SUSPENDED_STARTED) return PumpState.Suspended;
  303. else if (fdcState == LogicalDeviceState.FDC_SUSPENDED_FUELLING) return PumpState.Suspended;
  304. else if (fdcState == LogicalDeviceState.FDC_INVALIDSTATE) return PumpState.Unknown;
  305. else if (fdcState == LogicalDeviceState.FDC_UNDEFINED) return PumpState.Unknown;
  306. else if (fdcState == LogicalDeviceState.FDC_CONFIGURE) return PumpState.Closed;
  307. #if !_USE_OLD_FCONTROL_
  308. else if (fdcState == LogicalDeviceState.FDC_ERRORSTATE) return PumpState.Error;
  309. #else
  310. else if (fdcState == LogicalDeviceState.FDC_ERRORSTATE) return PumpState.Inoperative;
  311. #endif
  312. //else if (fdcState == LogicalDeviceState.FDC_LOCKED) return PumpState.Closed;
  313. else return PumpState.Unknown;
  314. }
  315. public IFuelling getFuellingByTransactionId(int transactionId, int releaseToken)
  316. {
  317. // first look for transactionId or for the authorizationId
  318. foreach (IFuelling fuelling in fuellingList)
  319. {
  320. if (transactionId > 0 && fuelling.FuellingSequenceNumber == transactionId ||
  321. transactionId == 0 && fuelling.AuthorizationId == releaseToken)
  322. return fuelling;
  323. }
  324. return null;
  325. }
  326. #region Properties
  327. public bool Blocked
  328. {
  329. get
  330. {
  331. return this.blocked;
  332. }
  333. }
  334. public bool CapFuelGradeSelected
  335. {
  336. get
  337. {
  338. return this.capFuelGradeSelected;
  339. }
  340. }
  341. public bool CapNozzleDetection
  342. {
  343. get
  344. {
  345. return this.capNozzleDetection;
  346. }
  347. }
  348. public bool CapSetLight
  349. {
  350. get
  351. {
  352. return this.capSetLight;
  353. }
  354. }
  355. public bool CapSuspendFuelling
  356. {
  357. get
  358. {
  359. return this.capSuspendFuelling;
  360. }
  361. }
  362. public bool Connected
  363. {
  364. get
  365. {
  366. return this.connected;
  367. }
  368. }
  369. public IFuelling CurrentFuelling
  370. {
  371. get
  372. {
  373. return this.currentFuelling;
  374. }
  375. }
  376. public string EntitySubType
  377. {
  378. get
  379. {
  380. return "";
  381. }
  382. }
  383. public string EntityType
  384. {
  385. get
  386. {
  387. return "Pump";
  388. }
  389. }
  390. /// <summary>
  391. /// This is used by the logger and should never be set by implementing classes
  392. /// </summary>
  393. public string FullEntityName { get; set; }
  394. public FUSIONManager Manager
  395. {
  396. get
  397. {
  398. return this.manager;
  399. }
  400. }
  401. public bool FuelGradeSelected
  402. {
  403. get
  404. {
  405. return this.fuelGradeSelected;
  406. }
  407. }
  408. public ReadOnlyCollection<IFuelling> Fuellings
  409. {
  410. get
  411. {
  412. return this.fuellingList.AsReadOnly();
  413. }
  414. }
  415. public int Id
  416. {
  417. get
  418. {
  419. if (manager.IdPumpShift > 0)
  420. return this.pumpId + manager.IdPumpShift;
  421. else
  422. return this.pumpId + manager.IdShift;
  423. }
  424. }
  425. public int realId
  426. {
  427. get
  428. {
  429. return this.pumpId;
  430. }
  431. }
  432. internal int NfsPumpSymbol
  433. {
  434. get
  435. {
  436. return this.nfsPumpSymbol;
  437. }
  438. set
  439. {
  440. this.nfsPumpSymbol = value;
  441. }
  442. }
  443. public ReadOnlyCollection<INozzle> Nozzles
  444. {
  445. get
  446. {
  447. return this.nozzles.AsReadOnly();
  448. }
  449. }
  450. public bool Open
  451. {
  452. get
  453. {
  454. return this.open;
  455. }
  456. }
  457. public IIdentifiableEntity ParentEntity
  458. {
  459. get
  460. {
  461. return this.parerentDevice;
  462. }
  463. }
  464. public PriceGroup PriceGroup
  465. {
  466. get
  467. {
  468. return priceGroup;
  469. }
  470. }
  471. public int ReservedBy
  472. {
  473. get
  474. {
  475. return this.reservedBy;
  476. }
  477. }
  478. public bool RunningFuellingUpdates
  479. {
  480. get
  481. {
  482. //return (this.runningFuellingDataTimer != null);
  483. return _runningFuellingUpdates;
  484. }
  485. set
  486. {
  487. this.CheckDisposed();
  488. if (this.runningFuellingDataTimer != null)
  489. {
  490. Trace.WriteLine("RunningFuellingTimer disposed on Pump: " + this.pumpId);
  491. this.runningFuellingDataTimer.Dispose();
  492. this.runningFuellingDataTimer = null;
  493. }
  494. if (value)
  495. {
  496. // TODO read timeout from ini file
  497. Trace.WriteLine("RunningFuellingTimer create on Pump: " + this.pumpId);
  498. this.runningFuellingDataTimer = new Timer(new TimerCallback(this.RunningFuellingTimerProc), null,
  499. manager.forecourtControl.ConfigParam.ReadRunningFuelling, manager.forecourtControl.ConfigParam.ReadRunningFuelling);
  500. }
  501. //if (value && !_runningFuellingUpdates)
  502. //{
  503. // // send GetCurrentFuellingUpdates command
  504. // this.manager.ifsfManager.GetCurrentFuellingStatus(this.Id);
  505. //}
  506. //else if (!value && _runningFuellingUpdates)
  507. //{
  508. //}
  509. _runningFuellingUpdates = value;
  510. }
  511. }
  512. public PumpState State
  513. {
  514. get
  515. {
  516. return this.state;
  517. }
  518. }
  519. public void NozzleStateChange(INozzle nozzle, NozzleState nozzleState)
  520. {
  521. if (this.OnNozzleStateChange != null)
  522. {
  523. Trace.WriteLine("OnNozzleStateChange.Invoke");
  524. this.OnNozzleStateChange.BeginInvoke(this, new NozzleStateChangeEventArgs(nozzle, nozzleState), null, null);
  525. }
  526. }
  527. public TankLevelSwitchStatus TankLevelSwitchStatus
  528. {
  529. get
  530. {
  531. return this.tankLevelSwitchStatus;
  532. }
  533. }
  534. internal bool WritableBlocked
  535. {
  536. get
  537. {
  538. return this.blocked;
  539. }
  540. set
  541. {
  542. this.blocked = value;
  543. }
  544. }
  545. internal bool WritableCapFuelGradeSelected
  546. {
  547. get
  548. {
  549. return this.capFuelGradeSelected;
  550. }
  551. set
  552. {
  553. this.capFuelGradeSelected = value;
  554. }
  555. }
  556. internal bool WritableCapNozzleDetection
  557. {
  558. get
  559. {
  560. return this.capNozzleDetection;
  561. }
  562. set
  563. {
  564. this.capNozzleDetection = value;
  565. }
  566. }
  567. internal bool WritableCapSetLight
  568. {
  569. get
  570. {
  571. return this.capSetLight;
  572. }
  573. set
  574. {
  575. this.capSetLight = value;
  576. }
  577. }
  578. internal bool WritableCapSuspendFuelling
  579. {
  580. get
  581. {
  582. return this.capSuspendFuelling;
  583. }
  584. set
  585. {
  586. this.capSuspendFuelling = value;
  587. }
  588. }
  589. internal bool WritableConnected
  590. {
  591. get
  592. {
  593. return this.connected;
  594. }
  595. set
  596. {
  597. this.connected = value;
  598. }
  599. }
  600. internal IFuelling WritableCurrentFuelling
  601. {
  602. get
  603. {
  604. return this.currentFuelling;
  605. }
  606. }
  607. internal string WritableDeviceName
  608. {
  609. get
  610. {
  611. return this.entitySubType;
  612. }
  613. set
  614. {
  615. this.entitySubType = value;
  616. }
  617. }
  618. internal bool WritableFuelGradeSelected
  619. {
  620. get
  621. {
  622. return this.fuelGradeSelected;
  623. }
  624. set
  625. {
  626. this.fuelGradeSelected = value;
  627. }
  628. }
  629. internal List<IFuelling> WritableFuellingList
  630. {
  631. get
  632. {
  633. return this.fuellingList;
  634. }
  635. }
  636. internal List<INozzle> WritableNozzleList
  637. {
  638. get
  639. {
  640. return this.nozzles;
  641. }
  642. }
  643. internal bool WritableOpen
  644. {
  645. get
  646. {
  647. return this.open;
  648. }
  649. set
  650. {
  651. this.open = value;
  652. }
  653. }
  654. internal IIdentifiableEntity WritableParentDevice
  655. {
  656. get
  657. {
  658. return this.parerentDevice;
  659. }
  660. set
  661. {
  662. this.parerentDevice = value;
  663. }
  664. }
  665. internal PriceGroup WritablePriceGroup
  666. {
  667. get
  668. {
  669. return this.priceGroup;
  670. }
  671. set
  672. {
  673. this.priceGroup = value;
  674. }
  675. }
  676. internal int WritablePumpId
  677. {
  678. get
  679. {
  680. return this.pumpId;
  681. }
  682. set
  683. {
  684. this.pumpId = value;
  685. }
  686. }
  687. internal int WritableReservedBy
  688. {
  689. get
  690. {
  691. return this.reservedBy;
  692. }
  693. set
  694. {
  695. this.reservedBy = value;
  696. }
  697. }
  698. internal PumpState WritableState
  699. {
  700. get
  701. {
  702. return this.state;
  703. }
  704. set
  705. {
  706. if (this.state != value)
  707. {
  708. this.state = value;
  709. Trace.WriteLine("state is different");
  710. if (this.OnStateChange != null)
  711. {
  712. Trace.WriteLine("OnStateChange.Invoke");
  713. this.OnStateChange.BeginInvoke(this, new PumpStateChangeEventArgs(this, this.state), null, null);
  714. }
  715. }
  716. }
  717. }
  718. internal TankLevelSwitchStatus WritableTankLevelSwitchStatus
  719. {
  720. get
  721. {
  722. return this.tankLevelSwitchStatus;
  723. }
  724. set
  725. {
  726. if (this.tankLevelSwitchStatus != value)
  727. {
  728. this.tankLevelSwitchStatus = value;
  729. if (this.OnTankLevelSwitchStatusChange != null)
  730. {
  731. this.OnTankLevelSwitchStatusChange.BeginInvoke(this, new TankLevelSwitchStatusChangeEventArgs(this, this.tankLevelSwitchStatus), null, null);
  732. }
  733. }
  734. }
  735. }
  736. #endregion // properties
  737. }
  738. }