git_bsmd/nsw/Source/SendNSWMessageService/NSWSendService.cs

144 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.IO;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using log4net;
using bsmd.database;
using bsmd.dbh;
namespace SendNSWMessageService
{
public partial class NSWSendService : ServiceBase
{
private Timer _timer;
private object _timerlock = new object();
private bool processRunning = false;
private ILog _log = LogManager.GetLogger(typeof(NSWSendService));
public NSWSendService()
{
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.EventLog.Source = this.ServiceName;
this.EventLog.Log = "Application";
this.EventLog.BeginInit();
if (!EventLog.SourceExists(this.EventLog.Source, this.EventLog.Log))
EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log);
this.EventLog.EndInit();
this.Init(args);
this.EventLog.WriteEntry("NSW Send Service started.", EventLogEntryType.Information);
}
public void Init(string[] args)
{
this._timer = new Timer();
this._timer.Interval = 5000; // 5 sec
this._timer.Elapsed += _timer_Elapsed;
this._timer.Enabled = true;
}
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
lock (this._timerlock)
{
if (this.processRunning) return;
else this.processRunning = true;
}
if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString))
{
// Datenbank auf zu sendende Objekte überprüfen und laden
List<Message> messagesToSendList = DBManager.Instance.GetToSendMessageList();
foreach (Message message in messagesToSendList)
{
try
{
_log.InfoFormat("Sending CORE message for {0} application to {1}",
message.MessageCore.IsTransit ? "TRANSIT" : "VISIT", message.MessageCore.InitialHIS.ToString());
// switch über passendes HIS / Schnittstelle
switch (message.MessageCore.InitialHIS)
{
case Message.NSWProvider.DBH:
bsmd.dbh.Request.SendMessage(message);
break;
case Message.NSWProvider.DAKOSY:
break;
case Message.NSWProvider.DUDR:
break;
default:
break;
}
// senden
// ..
}
catch (Exception ex)
{
_log.ErrorFormat("SENDING message {0}: {1}", message.ToString(), ex.Message);
}
}
DBManager.Instance.Disconnect();
}
else
{
this.EventLog.WriteEntry("NSW Send Service stopped: DB connection failed", EventLogEntryType.Error);
this.Stop();
}
lock (this._timerlock)
{
this.processRunning = false;
}
}
protected override void OnPause()
{
this._timer.Stop();
}
protected override void OnContinue()
{
this._timer.Start();
}
protected override void OnStop()
{
this._timer.Enabled = false;
this.EventLog.WriteEntry("NSW Send Service stopped.", EventLogEntryType.Information);
}
}
}