Files
Kanalsanierungsverwaltung/SanSystem/Dongle.cs

142 lines
3.2 KiB
C#

using CodeMeter;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SanSystem
{
class Dongle: IDisposable
{
uint FirmCode;
uint ProductCode;
Api cmApi;
CmCredential cmCred;
CmAccess2 cmAcc;
HCMSysEntry hcmse;
CmBoxInfo cmBoxInfo;
CmBoxEntry2 BoxContent;
public Dongle(uint ProductCode)
{
#if !DEBUG
this.FirmCode = 103086;
#else
this.FirmCode = 10;
#endif
this.ProductCode = ProductCode;
cmApi = new Api();
cmCred = new CmCredential();
cmAcc = new CmAccess2();
cmAcc.Credential = cmCred;
cmAcc.Ctrl |= CmAccess.Option.UserLimit;
cmAcc.FirmCode = this.FirmCode;
cmAcc.ProductCode = this.ProductCode;
hcmse = cmApi.CmAccess2(CmAccessOption.Local, cmAcc);
if(hcmse == null)
{
ErrorCodes2 code = cmApi.CmGetLastErrorCode2();
string output = string.Format("{0}", code);
}
if (!CheckDongleVorhanden())
Trace.WriteLine("Dongle nicht vorhanden");
cmBoxInfo = new CmBoxInfo();
CmGetBoxContentsOption boxOptions = new CmGetBoxContentsOption();
boxOptions = CmGetBoxContentsOption.FirmItem;
CmBoxEntry2[] tmpBoxContent;
tmpBoxContent = cmApi.CmGetBoxContents2(hcmse, boxOptions, this.FirmCode, cmBoxInfo);
foreach (CmBoxEntry2 boxes in tmpBoxContent)
{
if (boxes.ProductCode == this.ProductCode)
{
this.BoxContent = boxes;
}
}
}
~Dongle()
{
CleanDongle();
}
public void CleanDongle()
{
cmApi.CmRelease(hcmse);
}
public bool CheckDongleVorhanden()
{
#if LAPTOP
return true;
#else
if (hcmse == null)
return false;
else
return true;
#endif
}
public string GetDongleSerial()
{
CmBoxInfo res = (CmBoxInfo)cmApi.CmGetInfo(hcmse, CmGetInfoOption.BoxInfo);
if (null != res)
{
return res.SerialNumber.ToString();
}
else
{
throw new Exception("Fehler beim aufrufen der Seriennummer");
}
}
public uint GetFeatureMap()
{
return BoxContent.FeatureMap;
}
public string GetName()
{
return "";
}
public bool IsLicensed(byte neededMask)
{
#if LAPTOP
return true;
#else
uint DongleFeature = GetFeatureMap();
//Trace.WriteLine("DongleFeature: " + DongleFeature);
byte DongleFeatureB = (byte)DongleFeature;
if ((DongleFeatureB & neededMask) == neededMask)
return true;
return false;
#endif
}
public void Dispose()
{
CleanDongle();
}
}
}