解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
3.35 KiB
X
using System.Runtime.InteropServices;
using NewLife;
using Stardust.Models;

namespace Mobile.Stardust;

/// <summary>基于 NewLife.Core MachineInfo 的移动平台适配。Android/iOS 字段由 Core 平台分支采集</summary>
public class CoreMobilePlatform : IMobilePlatform
{
    private readonly MachineInfo _info;

    /// <summary>实例化。使用当前机器信息</summary>
    public CoreMobilePlatform() => _info = MachineInfo.GetCurrent();

    /// <summary>平台名称</summary>
    public String Name => _info.OSName.IsNullOrEmpty() ? "Mobile" : _info.OSName!;

    /// <summary>设备唯一标识</summary>
    public String DeviceId => !_info.UUID.IsNullOrEmpty() ? _info.UUID! : _info.Guid ?? "";

    /// <summary>设备名称。优先系统设置中的设备名称(如 FeiFan),否则使用产品型号</summary>
    public String DeviceName => _info["DeviceName"] as String ?? (!_info.Product.IsNullOrEmpty() ? _info.Product! : Environment.MachineName);

    /// <summary>操作系统名称</summary>
    public String OSName => _info.OSName ?? Name;

    /// <summary>操作系统版本</summary>
    public String OSVersion => _info.OSVersion ?? "";

    /// <summary>处理器架构</summary>
    public String Architecture => RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();

    /// <summary>获取应用私有数据目录</summary>
    /// <returns>可写目录</returns>
    public String GetDataPath()
    {
        var dir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        if (dir.IsNullOrEmpty()) dir = Path.GetTempPath();

        dir = Path.Combine(dir, "Mobile");
        if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);

        return dir;
    }

    /// <summary>填充节点信息</summary>
    /// <param name="info">节点信息</param>
    public void FillNodeInfo(NodeInfo info)
    {
        var mi = _info;
        try { mi.Refresh(); } catch { }

        info.OSName = mi.OSName;
        info.OSVersion = mi.OSVersion;
        info.Architecture = Architecture;
        info.MachineName = DeviceName;
        info.Product = mi.Product;
        info.Vendor = mi.Vendor;
        info.Processor = mi.Processor;
        info.Memory = mi.Memory;
        info.AvailableMemory = mi.AvailableMemory;
        info.FreeMemory = mi.FreeMemory;
        info.UUID = mi.UUID;
        info.MachineGuid = mi.Guid;
        info.SerialNumber = mi.Serial;
        info.Board = mi.Board;
        info.DiskID = mi.DiskID;
        info.ProcessorCount = Environment.ProcessorCount;
        info.Runtime = Environment.Version + "";
        info.Framework = RuntimeInformation.FrameworkDescription;

        try { info.TimeZone = TimeZoneInfo.Local.Id; } catch { }
    }

    /// <summary>填充心跳信息</summary>
    /// <param name="info">心跳信息</param>
    public void FillPingInfo(PingInfo info)
    {
        var mi = _info;
        try { mi.Refresh(); } catch { }

        info.Memory = mi.Memory;
        info.AvailableMemory = mi.AvailableMemory;
        info.FreeMemory = mi.FreeMemory;
        info.CpuRate = mi.CpuRate;
        info.Temperature = mi.Temperature;

        // MachineInfo.Battery 为 0~1,星尘平台使用百分比
        info.Battery = mi.Battery > 0 ? Math.Round(mi.Battery * 100, 1) : 0;
    }

    /// <summary>重启当前应用</summary>
    public void RestartApp() => Environment.Exit(0);
}