LogikalServer.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Dynamic;
  4. using System.Windows;
  5. using System.Windows.Threading;
  6. using InABox.Logikal;
  7. using Ofcas.Lk.Api.Client.Core;
  8. using Ofcas.Lk.Api.Shared;
  9. namespace PRSLogikal
  10. {
  11. public class LogikalLogArguments
  12. {
  13. public String Message { get; private set; }
  14. public LogikalLogArguments(string message)
  15. {
  16. Message = message;
  17. }
  18. }
  19. public delegate void LogikalLogEvent(object sender, LogikalLogArguments args);
  20. public class LogikalServer : IDisposable, ILogikalApp
  21. {
  22. //private readonly List<String> _log = new List<String>();
  23. //public String[] Log => _log.ToArray();
  24. public event LogikalLogEvent Log;
  25. private void DoLog(String message) => Log?.Invoke(this, new LogikalLogArguments(message));
  26. private IServiceProxyResult _proxy;
  27. private ICoreObjectResult<ILoginScope> _login;
  28. public LogikalStatus Connect(string path)
  29. {
  30. Disconnect();
  31. var _p = ServiceProxyFactory.CreateServiceProxy(path);
  32. var _status = _p.ServiceProxy.Start();
  33. if (_status.OperationCode != OperationCode.Accepted)
  34. {
  35. DoLog($"Unable to connect to Logikal at [{path}]: {_status}");
  36. return LogikalStatus.Error;
  37. }
  38. _proxy = _p;
  39. return LogikalStatus.Ok;
  40. }
  41. public LogikalStatus Disconnect()
  42. {
  43. Logout();
  44. if (_proxy != null)
  45. {
  46. _proxy.ServiceProxy.Stop();
  47. _proxy.Dispose();
  48. }
  49. _proxy = null;
  50. return LogikalStatus.Ok;
  51. }
  52. private void DoOnDisconnecting()
  53. {
  54. }
  55. public LogikalStatus Login(string username, string password)
  56. {
  57. Dictionary<string, object> _parameters = new Dictionary<string, object>()
  58. {
  59. { WellKnownParameterKey.Login.ProgramMode, "erp" },
  60. { WellKnownParameterKey.Login.UserName, username },
  61. { WellKnownParameterKey.Login.Password, password },
  62. };
  63. if (_proxy == null)
  64. {
  65. DoLog($"Logikal is not connected");
  66. return LogikalStatus.Error;
  67. }
  68. var _check = _proxy.ServiceProxy.CanLogin(_parameters);
  69. if (!_check.CanExecute)
  70. {
  71. DoLog($"Login not allowed: {_check}!");
  72. return LogikalStatus.Restricted;
  73. }
  74. try
  75. {
  76. var _l = _proxy.ServiceProxy.Login(_parameters);
  77. if (_l.OperationCode != OperationCode.Accepted)
  78. {
  79. DoLog($"Login failed: {_l}");
  80. _login = null;
  81. }
  82. else
  83. _login = _l;
  84. }
  85. catch (Exception e)
  86. {
  87. Log?.Invoke(this, new LogikalLogArguments($"{e.Message}\n{e.StackTrace}"));
  88. }
  89. return _login != null ? LogikalStatus.Ok : LogikalStatus.Failed;
  90. }
  91. public LogikalStatus Logout()
  92. {
  93. if (_login != null)
  94. _login.Dispose();
  95. _login = null;
  96. return LogikalStatus.Ok;
  97. }
  98. public void Dispose()
  99. {
  100. Disconnect();
  101. }
  102. }
  103. }