FUSIONOpt.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using System;
  2. using Wayne.Lib;
  3. using Wayne.ForecourtControl.Fusion;
  4. #if _SINP
  5. using Wayne.ForecourtControl.Nfs;
  6. #endif
  7. namespace Wayne.ForecourtControl.OptBridge.Fusion
  8. {
  9. internal class FUSIONOpt : IOpt
  10. {
  11. // Fields
  12. private DeviceConnectionState connectionState;
  13. private int id;
  14. private FUSIONOptBridge _optBridge;
  15. public FUSIONOptBridge optBridge
  16. {
  17. get { return _optBridge; }
  18. set { _optBridge = value; }
  19. }
  20. private int reservedByClientId;
  21. public int IPPort=0, baudRate = 0, dataBit = 0, stopBit = 0, parity = 0;
  22. public string COMPort = "", address = "";
  23. public OPTManagedBy managedBy;
  24. public OptTCP optTCP;
  25. // Events
  26. public event EventHandler<ConnectionChangedEventArgs> OnConnectionStateChange;
  27. public event EventHandler<OptDataEventArgs> OnDataRead;
  28. // Methods
  29. public FUSIONOpt(int id, FUSIONOptBridge _optBridge)
  30. {
  31. this.id = id;
  32. this.optBridge = _optBridge;
  33. }
  34. internal void FireOnDataRead(byte[] data)
  35. {
  36. if (this.OnDataRead != null)
  37. {
  38. this.OnDataRead.BeginInvoke(this, new OptDataEventArgs(data, 0), null, null);
  39. }
  40. }
  41. public void ReserveAsync(EventHandler<AsyncCompletedEventArgs> reserveCompleted, object userToken)
  42. {
  43. //AsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, reserveCompleted, userToken);
  44. //Function function = new Function(0x7d1, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(5, PrimitiveType.Byte, this.id) });
  45. //this.manager.Send(function);
  46. if (reserveCompleted != null)
  47. reserveCompleted.BeginInvoke(this, new AsyncCompletedEventArgs(true, userToken), null, null);
  48. }
  49. public void UnreserveAsync(EventHandler<AsyncCompletedEventArgs> unreserveCompleted, object userToken)
  50. {
  51. //AsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, unreserveCompleted, userToken);
  52. //Function function = new Function(0x7d2, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation.Id), new PrimitiveParameter(5, PrimitiveType.Byte, this.id) });
  53. //this.manager.Send(function);
  54. if (unreserveCompleted != null)
  55. unreserveCompleted.BeginInvoke(this, new AsyncCompletedEventArgs(true, userToken), null, null);
  56. }
  57. public void WriteAsync(byte[] terminalData, bool waitForSendOk, EventHandler<OptWriteCompletedEventArgs> writeCompleted, object userToken)
  58. {
  59. //AsyncOperation<ushort> operation = this.manager.AsyncManager.RegisterOperation<OptWriteCompletedEventArgs>(this, writeCompleted, userToken);
  60. //AsyncOperation<ushort> operation2 = this.manager.AsyncManager.RegisterOperation<AsyncCompletedEventArgs>(this, new EventHandler<AsyncCompletedEventArgs>(this.WriteSendCompleted), operation.Id);
  61. //Function function = new Function(0x7d5, new Parameter[] { new PrimitiveParameter(0x66, PrimitiveType.UInt16, operation2.Id), new PrimitiveParameter(0x259, PrimitiveType.ByteArray, terminalData), new PrimitiveParameter(5, PrimitiveType.Byte, this.id), new PrimitiveParameter(0x77, PrimitiveType.UInt16, this.manager.ClientId), new PrimitiveParameter(0x261, PrimitiveType.UInt32, operation.Id) });
  62. //this.manager.Send(function);
  63. if (this.managedBy == OPTManagedBy.Fusion)
  64. this.optBridge.manager.ifsfManager.OptWrite(this.Id, terminalData, writeCompleted, userToken, this);
  65. //OPTTCP
  66. else
  67. this.optTCP.OptWrite(terminalData, writeCompleted, userToken, this);
  68. }
  69. //private void WriteSendCompleted(object sender, AsyncCompletedEventArgs e)
  70. //{
  71. // if (!e.Success && (e.UserToken is ushort))
  72. // {
  73. // AsyncOperation<ushort, OptWriteCompletedEventArgs> operation;
  74. // ushort userToken = (ushort)e.UserToken;
  75. // if (this.manager.AsyncManager.TryGetOperation<OptWriteCompletedEventArgs>(userToken, out operation))
  76. // {
  77. // operation.Complete(new OptWriteCompletedEventArgs(false, operation.UserToken, 0));
  78. // }
  79. // }
  80. //}
  81. // Properties
  82. public DeviceConnectionState ConnectionState
  83. {
  84. get
  85. {
  86. return this.connectionState;
  87. }
  88. }
  89. public int Id
  90. {
  91. get
  92. {
  93. return this.id;
  94. }
  95. }
  96. public int ReservedByClientId
  97. {
  98. get
  99. {
  100. return this.reservedByClientId;
  101. }
  102. }
  103. internal DeviceConnectionState WritableConnectionState
  104. {
  105. get
  106. {
  107. return this.connectionState;
  108. }
  109. set
  110. {
  111. if (this.connectionState != value)
  112. {
  113. this.connectionState = value;
  114. Trace.WriteLine(string.Format("FUSIONOpt WritableConnectionState={0}", value));
  115. if (this.OnConnectionStateChange != null)
  116. {
  117. this.OnConnectionStateChange.BeginInvoke(this, new ConnectionChangedEventArgs(this.connectionState), null, null);
  118. }
  119. }
  120. }
  121. }
  122. internal int WritableReservedByClientId
  123. {
  124. get
  125. {
  126. return this.reservedByClientId;
  127. }
  128. set
  129. {
  130. this.reservedByClientId = value;
  131. }
  132. }
  133. }
  134. }