AuthReleaseTokenFactory.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Globalization;
  7. namespace FControlFUSIONCF
  8. {
  9. interface IReleaseToken
  10. {
  11. int TerminalId { get; }
  12. int AuthorizationId { get; }
  13. int? ReceiptNo { get; }
  14. }
  15. static class AuthReleaseTokenFactory
  16. {
  17. /// <summary>
  18. /// Create a token from components
  19. /// </summary>
  20. /// <param name="reservingDeviceId"></param>
  21. /// <param name="authorizationId"></param>
  22. /// <param name="receiptNo"></param>
  23. /// <returns></returns>
  24. public static IReleaseToken GenerateToken(int reservingDeviceId, int authorizationId, int? receiptNo)
  25. {
  26. return new ReleaseToken() { TerminalId = reservingDeviceId, AuthorizationId = authorizationId, ReceiptNo = receiptNo };
  27. }
  28. /// <summary>
  29. /// Create a token from its serializad form
  30. /// </summary>
  31. /// <param name="tokenstring"></param>
  32. /// <returns></returns>
  33. public static IReleaseToken GenerateToken(string tokenstring)
  34. {
  35. var token = new ReleaseToken();
  36. int terminalId = 0, authorizationId = 0, receiptNo = 0;
  37. if (TryGetParameter<int>(ReleaseToken.TerminalIdField, tokenstring, out terminalId))
  38. token.TerminalId = terminalId;
  39. if (TryGetParameter<int>(ReleaseToken.AuthorizationIdField, tokenstring, out authorizationId))
  40. token.AuthorizationId = authorizationId;
  41. if (TryGetParameter<int>(ReleaseToken.ReceiptNoField, tokenstring, out receiptNo))
  42. token.ReceiptNo = receiptNo;
  43. return token;
  44. }
  45. public static bool TryGetParameter<T>(string parameterName, string source, out T value, string delimiter = ";")
  46. {
  47. value = default(T);
  48. Regex regex = new Regex(String.Format("(\\A|{1}){0}\\s*=\\s*(?<{0}>[^{1}]*)", parameterName, delimiter));
  49. MatchCollection mc = regex.Matches(source);
  50. foreach (Match m in mc)
  51. {
  52. if (m.Success)
  53. {
  54. try
  55. {
  56. value = (T)Convert.ChangeType(m.Groups[parameterName].Value, typeof(T), CultureInfo.InvariantCulture);
  57. return true;
  58. }
  59. catch
  60. {
  61. return false;
  62. }
  63. }
  64. }
  65. return false;
  66. }
  67. class ReleaseToken : IReleaseToken
  68. {
  69. public const string TerminalIdField = "TerminalId";
  70. public const string AuthorizationIdField = "ReleaseId";
  71. public const string ReceiptNoField = "ReceiptNo";
  72. public int TerminalId { get; set; }
  73. public int AuthorizationId { get; set; }
  74. public int? ReceiptNo { get; set; }
  75. public override string ToString()
  76. {
  77. if (ReceiptNo.HasValue)
  78. return String.Format(CultureInfo.InvariantCulture, "{0}={1};{2}={3};{4}={5}", TerminalIdField, TerminalId,
  79. AuthorizationIdField, AuthorizationId, ReceiptNoField, ReceiptNo);
  80. else
  81. return String.Format(CultureInfo.InvariantCulture, "{0}={1};{2}={3}", TerminalIdField, TerminalId,
  82. AuthorizationIdField, AuthorizationId);
  83. }
  84. }
  85. }
  86. }