📄 serverlicenseprovider.cs
字号:
using System;
using System.IO;
using System.Globalization;
using FireSpider.Lang;
namespace GTT
{
public class ServerLicenseProvider : LicenseProvider
{
public override void SaveLicense(string fileName, ServerLicense license)
{
Stream licenseDataStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
try
{
SaveLicenseToDataStream(licenseDataStream, license);
licenseDataStream.Flush();
}
finally
{
licenseDataStream.Close();
licenseDataStream.Dispose();
}
}
protected void SaveLicenseToDataStream(Stream licenseDataStream, ServerLicense license)
{
Stream inputStream = GetLicenseDataStream(license);
inputStream.Position = 0;
BinaryReader br = new BinaryReader(inputStream);
BinaryWriter writer = new BinaryWriter(licenseDataStream);
writer.Write(br.ReadBytes((int)inputStream.Length), 0, (int)inputStream.Length);
writer.Flush();
}
protected virtual Stream GetLicenseDataStream(ServerLicense license)
{
string key = license.StartTicks + ":" + license.EndTicks;
MemoryStream memoryStream = new MemoryStream();
byte[] bytes = EnvironmentEx.LowToHighBC.GetBytes(key);
memoryStream.Write(bytes, 0, bytes.Length);
return memoryStream;
}
/// <summary>
/// 创建运行期间许可。
/// </summary>
/// <param name="type"></param>
/// <param name="key"></param>
/// <returns></returns>
protected virtual ServerLicense CreateLicense(string key)
{
string[] strArray = key.Split(new char[] { ':' });
return new ServerLicense(long.Parse(strArray[0], CultureInfo.InvariantCulture), long.Parse(strArray[1]));
}
/// <summary>
/// 取得许可。
/// </summary>
/// <param name="context"></param>
/// <param name="type"></param>
/// <param name="instance"></param>
/// <param name="allowExceptions"></param>
/// <returns></returns>
public override ServerLicense LoadLicense(string fileName)
{
ServerLicense license = null;
string errorMessage = null;
string licenseData = this.GetLicenseData(fileName);//从文件加载许可证数据。
if (((licenseData != null) && (licenseData.Length != 0)) && this.ValidateLicenseData(licenseData))//验证数据合法性。
{
ServerLicense license2 = this.CreateLicense(licenseData);//创建许可证对象。
if (this.ValidateLicense(license2, out errorMessage))//验证许可证的有效性。
{
license = license2;
}
}
return license;
}
/// <summary>
/// 获得许可证数据。
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
protected virtual string GetLicenseData(string fileName)
{
string str = null;
Stream licenseDataStream = null;
try
{
licenseDataStream = this.GetLicenseDataStream(fileName);
if (licenseDataStream != null)
{
licenseDataStream.Position = 0;
BinaryReader br = new BinaryReader(licenseDataStream);
byte[] bytes = br.ReadBytes((int)licenseDataStream.Length);
str = EnvironmentEx.LowToHighBC.ToString(bytes);
}
}
finally
{
if (licenseDataStream != null)
{
licenseDataStream.Close();
licenseDataStream = null;
}
}
return str;
}
/// <summary>
/// 获得许可证的文件流。
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
protected virtual Stream GetLicenseDataStream(string fileName)
{
try
{
if (File.Exists(fileName))
{
return new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
}
}
catch
{
}
return null;
}
/// <summary>
/// 许可是否有效。
/// </summary>
/// <param name="license"></param>
/// <param name="errorMessage"></param>
/// <returns></returns>
protected virtual bool ValidateLicense(ServerLicense license, out string errorMessage)
{
errorMessage = null;
ServerLicense license2 = (ServerLicense)license;
if (license2.IsExpired)
{
errorMessage = "The ServerLicense has expired.";
return false;
}
return true;
}
protected virtual bool ValidateLicenseData(string licenseData)
{
string[] strArray = licenseData.Split(new char[] { ':' });
return strArray.Length == 2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -