diff --git a/DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.Designer.cs b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.Designer.cs similarity index 96% rename from DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.Designer.cs rename to DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.Designer.cs index 5e4d6a9..350404a 100644 --- a/DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.Designer.cs +++ b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.Designer.cs @@ -1,6 +1,6 @@ namespace CardReaderService { - partial class Service1 + partial class CardReaderService { /// /// Required designer variable. diff --git a/DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.cs b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.cs similarity index 60% rename from DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.cs rename to DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.cs index 971ea0b..380c99a 100644 --- a/DataCenter_Windows/WindowsDataCenter/CardReaderService/Service1.cs +++ b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.cs @@ -1,23 +1,26 @@ using PCSC; using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading; +using Interfaces; namespace CardReaderService { - public partial class Service1 : ServiceBase + public partial class CardReaderService : ServiceBase { private Thread _mainWorkThread; private bool _stopMainWorkerThread; private string _readerName = ""; - //private SCardReader _reader; private SCardMonitor _cardMonitor; - public Service1() + private ILogger _logger; + + public CardReaderService() { InitializeComponent(); } @@ -26,21 +29,40 @@ namespace CardReaderService { OnStart(new string[] {}); } -// + protected override void OnStart(string[] args) { - Console.WriteLine("Starting.. Getting available readers"); + _logger = NinjectHelper.GetInstance().Get(); + _logger.Trace("Starting Service.. Getting available readers"); + var ctxFactory = ContextFactory.Instance; using(var context = ctxFactory.Establish(SCardScope.System)) { var readerNames = context.GetReaders(); if (NoReaderAvailable(readerNames)) { - Console.WriteLine("No Card Reader is available, Exiting.."); - return; + _logger.Trace("No Card Reader is available, Exiting.."); + throw new ApplicationException("A card reader must be provided in order to operate."); } - Console.WriteLine("Choosing first available reader: " + readerNames.First()); - _readerName = readerNames.First(); + foreach (var reader in readerNames) + { + _logger.Trace("Found reader: {0}", reader); + } + + var readerNameConfig = ConfigurationManager.AppSettings["ReaderName"]; + if (string.IsNullOrEmpty(readerNameConfig)) + { + if (!readerNames.Contains(readerNameConfig)) + { + _logger.Warn("No reader found with the name: {0}, defaulting to first available reader {1}", + readerNameConfig, readerNames.First()); + + readerNameConfig=readerNames.First(); + } + } + _logger.Trace("Choosing reader: {0}", readerNameConfig); + _readerName = readerNameConfig; + _cardMonitor = new SCardMonitor(ctxFactory, SCardScope.System); _cardMonitor.CardInserted += _cardMonitor_CardInserted; _cardMonitor.Start(_readerName); @@ -49,7 +71,7 @@ namespace CardReaderService } } - public void Stop() + public void StopService() { OnStop(); } @@ -65,12 +87,11 @@ namespace CardReaderService _mainWorkThread.Interrupt(); } } - if (_cardMonitor != null) - { - _cardMonitor.Cancel(); - _cardMonitor.Dispose(); - _cardMonitor = null; - } + if (_cardMonitor == null) return; + + _cardMonitor.Cancel(); + _cardMonitor.Dispose(); + _cardMonitor = null; } private void StartWorkerThread() @@ -91,11 +112,11 @@ namespace CardReaderService { var reader = new SCardReader(ctx); var pioSendPci = new IntPtr(); - byte[] rcvBuffer = new byte[256]; + var rcvBuffer = new byte[256]; if (_readerName == string.Empty) { - Console.WriteLine("Reader name is somehow empty... WTF!"); + _logger.Fatal("Reader name is somehow empty...exiting"); _stopMainWorkerThread = true; return; } @@ -107,20 +128,19 @@ namespace CardReaderService var uIdcmd = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x00 }; err = reader.Transmit(pioSendPci, uIdcmd, ref rcvBuffer); - if (err == SCardError.Success) - { - var uid = ConvertByteUIDToString(rcvBuffer); - var atrString = ConvertByteUIDToString(e.Atr); - Console.WriteLine("Card Inserted, ATR: " + atrString + ", and UID is: " + uid); + if (err != SCardError.Success) return; - CardDataPost postObj = new CardDataPost {CardUId = uid}; - DataCenterHelper.PostAsync(postObj, "/api/swipedata"); - Console.WriteLine("Posted to Server"); - } + var uid = ConvertByteUIDToString(rcvBuffer); + var atrString = ConvertByteUIDToString(e.Atr); + _logger.Trace("Card Inserted, ATR: " + atrString + ", and UID is: " + uid); + + var postObj = new CardDataPost {CardUId = uid}; + DataCenterHelper.PostAsync(postObj, "/api/swipedata"); + _logger.Trace("Posted to Server"); } else { - Console.WriteLine("Reader failed to connect, error: " + Enum.GetName(typeof(SCardError), err)); + _logger.Trace("Reader failed to connect, error: " + Enum.GetName(typeof(SCardError), err)); } } @@ -137,13 +157,11 @@ namespace CardReaderService private string ConvertByteUIDToString(byte[] uid) { - StringBuilder sb = new StringBuilder(); - + var sb = new StringBuilder(); foreach(var b in uid) { sb.AppendFormat("{0:X2}", b); } - return sb.ToString(); } diff --git a/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.csproj b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.csproj index 0311d6b..1480275 100644 --- a/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.csproj +++ b/DataCenter_Windows/WindowsDataCenter/CardReaderService/CardReaderService.csproj @@ -37,6 +37,10 @@ ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll True + + ..\packages\Ninject.3.2.2.0\lib\net45-full\Ninject.dll + True + ..\packages\PCSC.3.6.0\lib\net40\pcsc-sharp.dll True @@ -53,13 +57,16 @@ + - + + + Component - - Service1.cs + + CardReaderService.cs @@ -68,6 +75,17 @@ + + + {B7347B72-E208-423A-9D99-723B558EA3D7} + Interfaces + + + + + Always + +