AProtocolBase.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Opc.Ua.Client;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace IMCS_CCS.Utils.DeviceProtocol
  8. {
  9. public abstract class AProtocolBase
  10. {
  11. public abstract void ConnectAsync();
  12. public abstract void CloseConnect();
  13. public abstract object ReadData(int dataType, object dataParameter);
  14. public abstract bool WriteData(object obj);
  15. public abstract event MonitoredItemNotificationEventHandler OpcUaAlarmNotificationHandle;
  16. public string UserName { get; set; }
  17. public string UserPassword { get; set; }
  18. public abstract bool IsConnected { get; set; }
  19. private TaskCompletionSource<bool> mConnectTaskSource;
  20. private TaskCompletionSource<bool> mCloseTaskSource;
  21. public TaskCompletionSource<bool> MConnectTaskSource
  22. {
  23. get => mConnectTaskSource;
  24. set => mConnectTaskSource = value;
  25. }
  26. public TaskCompletionSource<bool> MCloseTaskSource
  27. {
  28. get => mCloseTaskSource;
  29. set => mCloseTaskSource = value;
  30. }
  31. public string IpEndPort { get; set; }
  32. public bool FinishConnectTask(bool result)
  33. {
  34. TaskCompletionSource<bool> connectTaskSource = this.mConnectTaskSource;
  35. if (connectTaskSource == null || Interlocked.CompareExchange<TaskCompletionSource<bool>>(ref this.mConnectTaskSource, (TaskCompletionSource<bool>)null, connectTaskSource) != connectTaskSource)
  36. return false;
  37. connectTaskSource.SetResult(result);
  38. return true;
  39. }
  40. public bool FinishCloseTask(bool result)
  41. {
  42. TaskCompletionSource<bool> closeTaskSource = this.mCloseTaskSource;
  43. if (closeTaskSource == null || Interlocked.CompareExchange<TaskCompletionSource<bool>>(ref this.mCloseTaskSource, (TaskCompletionSource<bool>)null, closeTaskSource) != closeTaskSource)
  44. return false;
  45. closeTaskSource.SetResult(result);
  46. return true;
  47. }
  48. public event EventHandler Connected;
  49. public event EventHandler Error;
  50. public event EventHandler Closed;
  51. protected virtual void OnConnected()
  52. {
  53. Connected?.Invoke(this, EventArgs.Empty);
  54. }
  55. protected virtual void OnErrorProtocol(ErrorEventArgs ags)
  56. {
  57. Error?.Invoke(this, ags);
  58. }
  59. protected virtual void OnClosed()
  60. {
  61. Closed?.Invoke(this, EventArgs.Empty);
  62. }
  63. }
  64. public class ErrorEventArgs : EventArgs
  65. {
  66. public Exception Exception { get; private set; }
  67. public ErrorEventArgs(Exception exception)
  68. {
  69. this.Exception = exception;
  70. }
  71. }
  72. }