using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Globalization;
namespace FControlFUSIONCF
{
interface IReleaseToken
{
int TerminalId { get; }
int AuthorizationId { get; }
int? ReceiptNo { get; }
}
static class AuthReleaseTokenFactory
{
///
/// Create a token from components
///
///
///
///
///
public static IReleaseToken GenerateToken(int reservingDeviceId, int authorizationId, int? receiptNo)
{
return new ReleaseToken() { TerminalId = reservingDeviceId, AuthorizationId = authorizationId, ReceiptNo = receiptNo };
}
///
/// Create a token from its serializad form
///
///
///
public static IReleaseToken GenerateToken(string tokenstring)
{
var token = new ReleaseToken();
int terminalId = 0, authorizationId = 0, receiptNo = 0;
if (TryGetParameter(ReleaseToken.TerminalIdField, tokenstring, out terminalId))
token.TerminalId = terminalId;
if (TryGetParameter(ReleaseToken.AuthorizationIdField, tokenstring, out authorizationId))
token.AuthorizationId = authorizationId;
if (TryGetParameter(ReleaseToken.ReceiptNoField, tokenstring, out receiptNo))
token.ReceiptNo = receiptNo;
return token;
}
public static bool TryGetParameter(string parameterName, string source, out T value, string delimiter = ";")
{
value = default(T);
Regex regex = new Regex(String.Format("(\\A|{1}){0}\\s*=\\s*(?<{0}>[^{1}]*)", parameterName, delimiter));
MatchCollection mc = regex.Matches(source);
foreach (Match m in mc)
{
if (m.Success)
{
try
{
value = (T)Convert.ChangeType(m.Groups[parameterName].Value, typeof(T), CultureInfo.InvariantCulture);
return true;
}
catch
{
return false;
}
}
}
return false;
}
class ReleaseToken : IReleaseToken
{
public const string TerminalIdField = "TerminalId";
public const string AuthorizationIdField = "ReleaseId";
public const string ReceiptNoField = "ReceiptNo";
public int TerminalId { get; set; }
public int AuthorizationId { get; set; }
public int? ReceiptNo { get; set; }
public override string ToString()
{
if (ReceiptNo.HasValue)
return String.Format(CultureInfo.InvariantCulture, "{0}={1};{2}={3};{4}={5}", TerminalIdField, TerminalId,
AuthorizationIdField, AuthorizationId, ReceiptNoField, ReceiptNo);
else
return String.Format(CultureInfo.InvariantCulture, "{0}={1};{2}={3}", TerminalIdField, TerminalId,
AuthorizationIdField, AuthorizationId);
}
}
}
}