git_bsmd/nsw/Source/bsmd.status/Status.cs

105 lines
4.1 KiB
C#

// Copyright (c) 2017 schick Informatik
// Description: Query NSW via HIS-Nord for free / taken message classes and visit id
using System;
using System.Collections.Specialized;
using System.Text;
using System.Net;
using log4net;
using bsmd.database;
namespace bsmd.status
{
public class Status
{
private static ILog _log = LogManager.GetLogger(typeof(bsmd.status.Status));
private MessageCore _queryCore;
public Status(MessageCore core2Query) { _queryCore = core2Query; }
public void PerformQuery()
{
if (this._queryCore == null) return;
using (WebClient client = new WebClient())
{
try
{
byte[] resultData = client.UploadValues(new Uri(Properties.Settings.Default.url),
new NameValueCollection()
{
// ich glaube ein HTML Encoding braucht man hier nicht?
{ "login", Properties.Settings.Default.login },
{ "password", Properties.Settings.Default.password },
{ "visitIdTransitId", _queryCore.IsTransit ? _queryCore.TransitId : _queryCore.VisitId },
{ "format", Properties.Settings.Default.format }
});
// Do some log output
string resultString = Encoding.UTF8.GetString(resultData);
_log.InfoFormat("Status query result: {0}", resultString);
dataset result = null;
try
{
result = dataset.ReadStatus(resultString);
}
catch (Exception ex)
{
_log.ErrorFormat("Error parsing status request result: {0}", ex.ToString());
}
if (result != null)
{
// Update database with result values
if (result.NswResponse != null)
{
// three-way bool!
if (result.NswResponse.Cancelled != null)
_queryCore.Cancelled = result.NswResponse.Equals("Y") ? true : false;
else
_queryCore.Cancelled = null;
if (result.NswResponse.VisitIdOrTransitIdCancellable != null)
_queryCore.VisitIdOrTransitIdCancellable = result.NswResponse.VisitIdOrTransitIdCancellable.Equals("Y") ? true : false;
else
_queryCore.VisitIdOrTransitIdCancellable = null;
_queryCore.BlockedNotificationClasses = result.NswResponse.BlockedNotificationClasses;
_queryCore.OwnNotificationClasses = result.NswResponse.OwnNotificationClasses;
_queryCore.FreeNotificationClasses = result.NswResponse.FreeNotificationClasses;
_queryCore.StatusCheckErrorCode = result.NswResponse.ErrorCode;
_queryCore.StatusCheckErrorMessage = result.NswResponse.ErrorMessage;
}
else
{
if(result.LoginError != null)
{
_log.ErrorFormat("Login error: {0}", result.LoginError);
}
}
}
else
{
_log.Error("parsing result status failed");
}
DBManager.Instance.Save(_queryCore);
}
catch (Exception e)
{
_log.ErrorFormat("Error uploading status request values: {0}", e.ToString());
}
}
}
}
}