Compare commits
No commits in common. 'simpledesign' and 'master' have entirely different histories.
simpledesi
...
master
@ -0,0 +1,63 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
|
using OMS.NET.DbClass;
|
||||||
|
|
||||||
|
namespace OMS.NET.Common
|
||||||
|
{
|
||||||
|
public class LayerData
|
||||||
|
{
|
||||||
|
public string? TemplateId { get; set; }
|
||||||
|
public long LayerId { get; set; }
|
||||||
|
public bool HasChange { get; set; } = false;
|
||||||
|
public string Type { get; set; }
|
||||||
|
public JsonNode? Members { get; set; }
|
||||||
|
public JsonNode? Structure { get; set; }
|
||||||
|
public int Phase { get; set; } = 1;
|
||||||
|
|
||||||
|
public LayerData(long layerId, string type)
|
||||||
|
{
|
||||||
|
LayerId = layerId;
|
||||||
|
Type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LayerData(string? templateId, MapLayer layer)
|
||||||
|
{
|
||||||
|
TemplateId = templateId;
|
||||||
|
LayerId = layer.Id;
|
||||||
|
Type = layer.Type;
|
||||||
|
Members = (layer.Type == "order") ? JsonNode.Parse(layer.Members) : JsonNode.Parse(Util.Base64ToJson(layer.Members));
|
||||||
|
Structure = string.IsNullOrEmpty(layer.Structure) ? null : JsonNode.Parse(Util.Base64ToJson(layer.Structure));
|
||||||
|
Phase = layer.Phase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AppendElement(long itemId, string ItemType)
|
||||||
|
{
|
||||||
|
if (this.Type == "order")
|
||||||
|
{
|
||||||
|
GlobalArea.Log.Error($"order图层不能添加{ItemType}元素");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.Members![itemId.ToString()] == null)
|
||||||
|
{
|
||||||
|
this.Members![itemId.ToString()] = ItemType;
|
||||||
|
this.Structure!.AsArray().Add(itemId);
|
||||||
|
this.HasChange = true;
|
||||||
|
//上传图层到数据库
|
||||||
|
MapLayer mapLayer = ConvertToMapLayer();
|
||||||
|
MapLayer.Update(mapLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MapLayer ConvertToMapLayer()
|
||||||
|
{
|
||||||
|
return new MapLayer()
|
||||||
|
{
|
||||||
|
Id = this.LayerId,
|
||||||
|
Type = this.Type,
|
||||||
|
Members = (this.Type == "order") ? this.Members!.ToString() : Util.JsonToBase64(this.Members!.ToString()),
|
||||||
|
Structure = (this.Structure == null) ? "" : Util.JsonToBase64(this.Structure!.ToString()),
|
||||||
|
Phase = this.Phase
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Nodes;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace OMS.NET.Common
|
||||||
|
{
|
||||||
|
public class Point
|
||||||
|
{
|
||||||
|
public double X { get; set; }
|
||||||
|
public double Y { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Util
|
||||||
|
{
|
||||||
|
public static readonly JsonSerializerOptions options = new()
|
||||||
|
{
|
||||||
|
ReadCommentHandling = JsonCommentHandling.Skip, //允许注释
|
||||||
|
AllowTrailingCommas = true,//允许尾随逗号
|
||||||
|
//PropertyNamingPolicy = new InstructNamingPolicy(), // 属性名为定制转换
|
||||||
|
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, // 忽略 null 值
|
||||||
|
WriteIndented = true, // 美化输出
|
||||||
|
PropertyNameCaseInsensitive = true,//属性名忽略大小写
|
||||||
|
};
|
||||||
|
|
||||||
|
public static string ObjToBase64(object obj)
|
||||||
|
{
|
||||||
|
string utf8 = JsonSerializer.Serialize(obj, options);
|
||||||
|
return Convert.ToBase64String(Encoding.UTF8.GetBytes(utf8));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string JsonToBase64(string json)
|
||||||
|
{
|
||||||
|
return Convert.ToBase64String(Encoding.UTF8.GetBytes(json));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Base64ToJson(string base64)
|
||||||
|
{
|
||||||
|
return Encoding.UTF8.GetString(Convert.FromBase64String(base64));
|
||||||
|
}
|
||||||
|
|
||||||
|
// public static JsonNode? JsonNodeFromJson(string json)
|
||||||
|
// {
|
||||||
|
// return JsonNode.Parse(json);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//===========================================================
|
||||||
|
|
||||||
|
public static List<Point> PointsFromBase64(string base64)
|
||||||
|
{
|
||||||
|
string utf8 = Base64ToJson(base64);
|
||||||
|
return PointsFromJson(utf8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Point> PointsFromJson(string json)
|
||||||
|
{
|
||||||
|
return JsonSerializer.Deserialize<List<Point>>(json, options) ?? new List<Point>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point PointFromBase64(string base64)
|
||||||
|
{
|
||||||
|
string utf8 = Base64ToJson(base64);
|
||||||
|
return PointFromJson(utf8);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point PointFromJson(string json)
|
||||||
|
{
|
||||||
|
return JsonSerializer.Deserialize<Point>(json, options) ?? throw new Exception("转化point类型失败:" + json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace OMS.NET.Common
|
||||||
|
{
|
||||||
|
public static class Validations
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 验证颜色值是否有效
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="color"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsHexColor(string color)
|
||||||
|
{
|
||||||
|
// Regex for hex color code (with or without #)
|
||||||
|
var hexColorRegex = new Regex(@"^#?[0-9A-Fa-f]{6}$");
|
||||||
|
return hexColorRegex.IsMatch(color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,112 @@
|
|||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
|
||||||
|
namespace OMS.NET.DbClass
|
||||||
|
{
|
||||||
|
public class AccountData
|
||||||
|
{
|
||||||
|
#region base
|
||||||
|
public string UserEmail { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
public int? MapLayer { get; set; }
|
||||||
|
public string? DefaultA1 { get; set; }
|
||||||
|
public string? SavePoint { get; set; }
|
||||||
|
public string? UserQQ { get; set; }
|
||||||
|
public string? HeadColor { get; set; }
|
||||||
|
public int Mode { get; set; }
|
||||||
|
public int Phase { get; set; }
|
||||||
|
public string? Custom { get; set; }
|
||||||
|
|
||||||
|
public AccountData()
|
||||||
|
{
|
||||||
|
this.UserEmail = "";
|
||||||
|
this.UserName = "";
|
||||||
|
this.Password = "";
|
||||||
|
this.Mode = 1;
|
||||||
|
this.Phase = 1;
|
||||||
|
//this.Custom = "";
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
public static void Add(AccountData accountData)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"INSERT INTO account_data (user_email, user_name, pass_word, map_layer, default_a1, save_point, user_qq, head_color, mode, phase, custom)
|
||||||
|
VALUES (@UserEmail, @UserName, @Password, @MapLayer, @DefaultA1, @SavePoint, @UserQQ, @HeadColor, @Mode, @Phase, @Custom)";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@UserEmail", accountData.UserEmail);
|
||||||
|
command.Parameters.AddWithValue("@UserName", accountData.UserName);
|
||||||
|
command.Parameters.AddWithValue("@Password", accountData.Password);
|
||||||
|
command.Parameters.AddWithValue("@MapLayer", accountData.MapLayer ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@DefaultA1", accountData.DefaultA1 ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@SavePoint", accountData.SavePoint ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@UserQQ", accountData.UserQQ ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@HeadColor", accountData.HeadColor ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Mode", accountData.Mode);
|
||||||
|
command.Parameters.AddWithValue("@Phase", accountData.Phase);
|
||||||
|
command.Parameters.AddWithValue("@Custom", accountData.Custom ?? (object)DBNull.Value);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Update(AccountData accountData)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"UPDATE account_data SET user_name = @UserName, pass_word = @Password, map_layer = @MapLayer, default_a1 = @DefaultA1, save_point = @SavePoint, user_qq = @UserQQ, head_color = @HeadColor, mode = @Mode, phase = @Phase, custom = @Custom
|
||||||
|
WHERE user_email = @UserEmail";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@UserEmail", accountData.UserEmail);
|
||||||
|
command.Parameters.AddWithValue("@UserName", accountData.UserName);
|
||||||
|
command.Parameters.AddWithValue("@Password", accountData.Password);
|
||||||
|
command.Parameters.AddWithValue("@MapLayer", accountData.MapLayer ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@DefaultA1", accountData.DefaultA1 ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@SavePoint", accountData.SavePoint ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@UserQQ", accountData.UserQQ ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@HeadColor", accountData.HeadColor ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Mode", accountData.Mode);
|
||||||
|
command.Parameters.AddWithValue("@Phase", accountData.Phase);
|
||||||
|
command.Parameters.AddWithValue("@Custom", accountData.Custom ?? (object)DBNull.Value);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Delete(string userEmail)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"DELETE FROM account_data WHERE user_email = @UserEmail";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@UserEmail", userEmail);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AccountData? Get(string userEmail)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"SELECT user_email, user_name, pass_word, map_layer, default_a1, save_point, user_qq, head_color, mode, phase, custom
|
||||||
|
FROM account_data WHERE user_email = @UserEmail";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@UserEmail", userEmail);
|
||||||
|
using var reader = command.ExecuteReader();
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
return new AccountData
|
||||||
|
{
|
||||||
|
UserEmail = reader.GetString("user_email"),
|
||||||
|
UserName = reader.GetString("user_name"),
|
||||||
|
Password = reader.GetString("pass_word"),
|
||||||
|
MapLayer = reader["map_layer"] as int?,
|
||||||
|
DefaultA1 = reader["default_a1"] as string,
|
||||||
|
SavePoint = reader["save_point"] as string,
|
||||||
|
UserQQ = reader["user_qq"] as string,
|
||||||
|
HeadColor = reader["head_color"] as string,
|
||||||
|
Mode = reader.GetInt32("mode"),
|
||||||
|
Phase = reader.GetInt32("phase"),
|
||||||
|
Custom = reader["custom"] as string,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,28 +0,0 @@
|
|||||||
namespace OMS.NET.DbClass
|
|
||||||
{
|
|
||||||
[Table("map_data")]
|
|
||||||
public class Map : SqlTable
|
|
||||||
{
|
|
||||||
[Column("id", true)] // Primary Key and Identity false
|
|
||||||
public string Id { get; set; }
|
|
||||||
|
|
||||||
[Column("name")]
|
|
||||||
public string Name { get; set; }
|
|
||||||
|
|
||||||
[Column("description")]
|
|
||||||
public string Description { get; set; }
|
|
||||||
|
|
||||||
public Map()
|
|
||||||
{
|
|
||||||
Id = "";
|
|
||||||
Name = "";
|
|
||||||
Description = "";
|
|
||||||
}
|
|
||||||
public Map(string key, string name, string description)
|
|
||||||
{
|
|
||||||
Id = key;
|
|
||||||
Name = name;
|
|
||||||
Description = description;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,155 @@
|
|||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
|
||||||
|
namespace OMS.NET.DbClass
|
||||||
|
{
|
||||||
|
public class MapData
|
||||||
|
{
|
||||||
|
#region base
|
||||||
|
public long Id { get; set; }
|
||||||
|
public string Type { get; set; }
|
||||||
|
public string Points { get; set; }
|
||||||
|
public string Point { get; set; }
|
||||||
|
public string? Color { get; set; }
|
||||||
|
public int Phase { get; set; }
|
||||||
|
public int? Width { get; set; }
|
||||||
|
public string? ChildRelations { get; set; }
|
||||||
|
public string? FatherRelations { get; set; }
|
||||||
|
public string? ChildNodes { get; set; }
|
||||||
|
public string? FatherNode { get; set; }
|
||||||
|
public string? Details { get; set; }
|
||||||
|
public string? Custom { get; set; }
|
||||||
|
|
||||||
|
public MapData()
|
||||||
|
{
|
||||||
|
this.Id = -1;
|
||||||
|
this.Type = "";
|
||||||
|
this.Points = "";
|
||||||
|
this.Point = "";
|
||||||
|
this.Phase = 1;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public static void Add(MapData mapData)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"INSERT INTO map_0_data (type, points, point, color, phase, width, child_relations, father_relations, child_nodes, father_node, details, custom)
|
||||||
|
VALUES (@Type, @Points, @Point, @Color, @Phase, @Width, @ChildRelations, @FatherRelations, @ChildNodes, @FatherNode, @Details, @Custom)";
|
||||||
|
using MySqlCommand command = new(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Type", mapData.Type);
|
||||||
|
command.Parameters.AddWithValue("@Points", mapData.Points);
|
||||||
|
command.Parameters.AddWithValue("@Point", mapData.Point);
|
||||||
|
command.Parameters.AddWithValue("@Color", mapData.Color ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Phase", mapData.Phase);
|
||||||
|
command.Parameters.AddWithValue("@Width", mapData.Width ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@ChildRelations", mapData.ChildRelations ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@FatherRelations", mapData.FatherRelations ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@ChildNodes", mapData.ChildNodes ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@FatherNode", mapData.FatherNode ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Details", mapData.Details ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Custom", mapData.Custom ?? (object)DBNull.Value);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
mapData.Id = command.LastInsertedId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int Update(MapData mapData)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"UPDATE map_0_data SET type = @Type, points = @Points, point = @Point, color = @Color, phase = @Phase, width = @Width,
|
||||||
|
child_relations = @ChildRelations, father_relations = @FatherRelations, child_nodes = @ChildNodes, father_node = @FatherNode,
|
||||||
|
details = @Details, custom = @Custom WHERE id = @Id";
|
||||||
|
using MySqlCommand command = new(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", mapData.Id);
|
||||||
|
command.Parameters.AddWithValue("@Type", mapData.Type);
|
||||||
|
command.Parameters.AddWithValue("@Points", mapData.Points);
|
||||||
|
command.Parameters.AddWithValue("@Point", mapData.Point);
|
||||||
|
command.Parameters.AddWithValue("@Color", mapData.Color ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Phase", mapData.Phase);
|
||||||
|
command.Parameters.AddWithValue("@Width", mapData.Width ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@ChildRelations", mapData.ChildRelations ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@FatherRelations", mapData.FatherRelations ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@ChildNodes", mapData.ChildNodes ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@FatherNode", mapData.FatherNode ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Details", mapData.Details ?? (object)DBNull.Value);
|
||||||
|
command.Parameters.AddWithValue("@Custom", mapData.Custom ?? (object)DBNull.Value);
|
||||||
|
return command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Delete(long id)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"DELETE FROM map_0_data WHERE id = @Id";
|
||||||
|
using MySqlCommand command = new(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", id);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MapData? Get(long id)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"SELECT id, type, points, point, color, phase, width, child_relations, father_relations, child_nodes, father_node, details, custom
|
||||||
|
FROM map_0_data WHERE id = @Id";
|
||||||
|
using MySqlCommand command = new(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", id);
|
||||||
|
using MySqlDataReader reader = command.ExecuteReader();
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
return new MapData
|
||||||
|
{
|
||||||
|
Id = reader.GetInt64("id"),
|
||||||
|
Type = reader.GetString("type"),
|
||||||
|
Points = reader.GetString("points"),
|
||||||
|
Point = reader.GetString("point"),
|
||||||
|
Color = reader["color"] as string,
|
||||||
|
Phase = reader.GetInt32("phase"),
|
||||||
|
Width = reader["width"] as int?,
|
||||||
|
ChildRelations = reader["child_relations"] as string,
|
||||||
|
FatherRelations = reader["father_relations"] as string,
|
||||||
|
ChildNodes = reader["child_nodes"] as string,
|
||||||
|
FatherNode = reader["father_node"] as string,
|
||||||
|
Details = reader["details"] as string,
|
||||||
|
Custom = reader["custom"] as string
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MapData> GetMapDataList()
|
||||||
|
{
|
||||||
|
List<MapData> mapDataList = new();
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"SELECT * FROM map_0_data";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
using var reader = command.ExecuteReader();
|
||||||
|
if (reader.HasRows)
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
var mapData = new MapData
|
||||||
|
{
|
||||||
|
Id = reader.GetInt64("id"),
|
||||||
|
Type = reader.GetString("type"),
|
||||||
|
Points = reader.GetString("points"),
|
||||||
|
Point = reader.GetString("point"),
|
||||||
|
Color = reader.IsDBNull(reader.GetOrdinal("color")) ? null : reader.GetString("color"),
|
||||||
|
Phase = reader.GetInt32("phase"),
|
||||||
|
Width = reader.IsDBNull(reader.GetOrdinal("width")) ? (int?)null : reader.GetInt32("width"),
|
||||||
|
ChildRelations = reader.IsDBNull(reader.GetOrdinal("child_relations")) ? null : reader.GetString("child_relations"),
|
||||||
|
FatherRelations = reader.IsDBNull(reader.GetOrdinal("father_relations")) ? null : reader.GetString("father_relations"),
|
||||||
|
ChildNodes = reader.IsDBNull(reader.GetOrdinal("child_nodes")) ? null : reader.GetString("child_nodes"),
|
||||||
|
FatherNode = reader.IsDBNull(reader.GetOrdinal("father_node")) ? null : reader.GetString("father_node"),
|
||||||
|
Details = reader.IsDBNull(reader.GetOrdinal("details")) ? null : reader.GetString("details"),
|
||||||
|
Custom = reader.IsDBNull(reader.GetOrdinal("custom")) ? null : reader.GetString("custom")
|
||||||
|
};
|
||||||
|
mapDataList.Add(mapData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapDataList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,142 @@
|
|||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
|
||||||
|
namespace OMS.NET.DbClass
|
||||||
|
{
|
||||||
|
public class MapLayer
|
||||||
|
{
|
||||||
|
#region base
|
||||||
|
public long Id { get; set; }
|
||||||
|
public string Type { get; set; }
|
||||||
|
public string Members { get; set; }
|
||||||
|
public string Structure { get; set; }
|
||||||
|
public int Phase { get; set; }
|
||||||
|
|
||||||
|
public MapLayer()
|
||||||
|
{
|
||||||
|
this.Id = 0;
|
||||||
|
this.Type = "";
|
||||||
|
this.Members = "";
|
||||||
|
this.Structure = "";
|
||||||
|
this.Phase = 1;
|
||||||
|
}
|
||||||
|
public MapLayer(long id, string type, string members, string structure, int phase)
|
||||||
|
{
|
||||||
|
Id = id;
|
||||||
|
Type = type;
|
||||||
|
Members = members;
|
||||||
|
Structure = structure;
|
||||||
|
Phase = phase;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
public static void Add(MapLayer mapLayer)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"INSERT INTO map_0_layer (type, members, structure, phase)
|
||||||
|
VALUES (@Type, @Members, @Structure, @Phase)";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Type", mapLayer.Type);
|
||||||
|
command.Parameters.AddWithValue("@Members", mapLayer.Members);
|
||||||
|
command.Parameters.AddWithValue("@Structure", mapLayer.Structure);
|
||||||
|
command.Parameters.AddWithValue("@Phase", mapLayer.Phase);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
mapLayer.Id = command.LastInsertedId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Update(MapLayer mapLayer)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"UPDATE map_0_layer SET type = @Type, members = @Members, structure = @Structure, phase = @Phase
|
||||||
|
WHERE id = @Id";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", mapLayer.Id);
|
||||||
|
command.Parameters.AddWithValue("@Type", mapLayer.Type);
|
||||||
|
command.Parameters.AddWithValue("@Members", mapLayer.Members);
|
||||||
|
command.Parameters.AddWithValue("@Structure", mapLayer.Structure);
|
||||||
|
command.Parameters.AddWithValue("@Phase", mapLayer.Phase);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Delete(long id)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"DELETE FROM map_0_layer WHERE id = @Id";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", id);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MapLayer? Get(long id)
|
||||||
|
{
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
var query = @"SELECT id, type, members, structure, phase FROM map_0_layer WHERE id = @Id";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
command.Parameters.AddWithValue("@Id", id);
|
||||||
|
using var reader = command.ExecuteReader();
|
||||||
|
if (reader.Read())
|
||||||
|
{
|
||||||
|
return new MapLayer
|
||||||
|
{
|
||||||
|
Id = reader.GetInt64("id"),
|
||||||
|
Type = reader.GetString("type"),
|
||||||
|
Members = reader.GetString("members"),
|
||||||
|
Structure = reader.GetString("structure"),
|
||||||
|
Phase = reader.GetInt32("phase")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有MapLayer数据
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static List<MapLayer> GetMapLayerList()
|
||||||
|
{
|
||||||
|
List<MapLayer> mapLayerList = new();
|
||||||
|
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
||||||
|
connection.Open();
|
||||||
|
string query = "SELECT * FROM map_0_layer";
|
||||||
|
using var command = new MySqlCommand(query, connection);
|
||||||
|
using var reader = command.ExecuteReader();
|
||||||
|
if (reader.HasRows)
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
var mapLayer = new MapLayer
|
||||||
|
{
|
||||||
|
Id = reader.GetInt64("id"),
|
||||||
|
Type = reader.GetString("type"),
|
||||||
|
Members = reader.GetString("members"),
|
||||||
|
Structure = reader.GetString("structure"),
|
||||||
|
Phase = reader.GetInt32("phase")
|
||||||
|
};
|
||||||
|
mapLayerList.Add(mapLayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mapLayerList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 指定是否将指定字段编码成base64格式 ???
|
||||||
|
/// </summary>
|
||||||
|
public static void ProcessMapLayers(List<MapLayer> mapLayers, bool encode = false)
|
||||||
|
{
|
||||||
|
mapLayers.ForEach(mapLayer =>
|
||||||
|
{
|
||||||
|
if (encode)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,196 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using MySql.Data.MySqlClient;
|
|
||||||
using OMS.NET.Common;
|
|
||||||
namespace OMS.NET.DbClass
|
|
||||||
{
|
|
||||||
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
|
|
||||||
public class TableAttribute : Attribute
|
|
||||||
{
|
|
||||||
public string TableName { get; }
|
|
||||||
public TableAttribute(string tableName)
|
|
||||||
{
|
|
||||||
TableName = tableName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[AttributeUsage(AttributeTargets.Property, Inherited = false)]
|
|
||||||
public class ColumnAttribute : Attribute
|
|
||||||
{
|
|
||||||
public string ColumnName { get; }
|
|
||||||
public bool IsPrimaryKey { get; }
|
|
||||||
|
|
||||||
public bool IsIdentity { get; } // 是否自增列
|
|
||||||
public ColumnAttribute(string columnName, bool isPrimaryKey = false, bool isIdentity = false)
|
|
||||||
{
|
|
||||||
ColumnName = columnName;
|
|
||||||
IsPrimaryKey = isPrimaryKey;
|
|
||||||
IsIdentity = isIdentity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SqlHelper
|
|
||||||
{
|
|
||||||
public static string GetTableName(Type type)
|
|
||||||
{
|
|
||||||
var attr = type.GetCustomAttribute<TableAttribute>();
|
|
||||||
return attr?.TableName ?? throw new Exception($"{type.Name} 没有指定数据表");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsIdentity(Type type)
|
|
||||||
{
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
return primaryKey.GetCustomAttribute<ColumnAttribute>()!.IsIdentity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<PropertyInfo> GetProperties(Type type)
|
|
||||||
{
|
|
||||||
return type.GetProperties()
|
|
||||||
.Where(p => p.GetCustomAttribute<ColumnAttribute>() != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static PropertyInfo GetPrimaryKeyProperties(Type type)
|
|
||||||
{
|
|
||||||
var primaryKeyProperties = GetProperties(type)
|
|
||||||
.Where(p => p.GetCustomAttribute<ColumnAttribute>()?.IsPrimaryKey == true)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (primaryKeyProperties.Count == 0)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("No primary key defined for the class.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (primaryKeyProperties.Count != 1)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Multiple primary keys defined for the class. Only one primary key is allowed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return primaryKeyProperties.First();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IEnumerable<PropertyInfo> GetNonKeyProperties(Type type)
|
|
||||||
{
|
|
||||||
return GetProperties(type)
|
|
||||||
.Where(p => p.GetCustomAttribute<ColumnAttribute>()?.IsPrimaryKey == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static PropertyInfo? GetIdentityKeyProperty(Type type)
|
|
||||||
{
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
return (primaryKey.GetCustomAttribute<ColumnAttribute>()!.IsIdentity == true) ? null : primaryKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetInsertSql(Type type)
|
|
||||||
{
|
|
||||||
var tableName = GetTableName(type);
|
|
||||||
var identityKey = GetIdentityKeyProperty(type);
|
|
||||||
var columns = GetNonKeyProperties(type)
|
|
||||||
.Select(p => p.GetCustomAttribute<ColumnAttribute>()!.ColumnName).ToList();
|
|
||||||
var values = GetNonKeyProperties(type)
|
|
||||||
.Select(p => "@" + p.Name).ToList();
|
|
||||||
|
|
||||||
if (identityKey != null)
|
|
||||||
{
|
|
||||||
// Exclude the identity key from columns and values for insert statement
|
|
||||||
columns.Add(identityKey.GetCustomAttribute<ColumnAttribute>()!.ColumnName);
|
|
||||||
values.Add("@" + identityKey.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $"INSERT INTO {tableName} ({string.Join(", ", columns)}) VALUES ({string.Join(", ", values)})";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetUpdateSql(Type type)
|
|
||||||
{
|
|
||||||
var tableName = GetTableName(type);
|
|
||||||
var setClause = string.Join(", ",
|
|
||||||
GetNonKeyProperties(type)
|
|
||||||
.Select(p => $"{p.GetCustomAttribute<ColumnAttribute>()!.ColumnName} = @{p.Name}"));
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
var whereClause = $"{primaryKey.GetCustomAttribute<ColumnAttribute>()!.ColumnName} = @{primaryKey.Name}";
|
|
||||||
|
|
||||||
return $"UPDATE {tableName} SET {setClause} WHERE {whereClause}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetDeleteSql(Type type)
|
|
||||||
{
|
|
||||||
var tableName = GetTableName(type);
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
var whereClause = $"{primaryKey.GetCustomAttribute<ColumnAttribute>()!.ColumnName} = @{primaryKey.Name}";
|
|
||||||
|
|
||||||
return $"DELETE FROM {tableName} WHERE {whereClause}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetSelectSql(Type type)
|
|
||||||
{
|
|
||||||
var tableName = GetTableName(type);
|
|
||||||
var columns = string.Join(", ",
|
|
||||||
GetProperties(type)
|
|
||||||
.Select(p => p.GetCustomAttribute<ColumnAttribute>()!.ColumnName));
|
|
||||||
|
|
||||||
return $"SELECT {columns} FROM {tableName}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetSelectSqlWithPrimaryKey(Type type)
|
|
||||||
{
|
|
||||||
var tableName = GetTableName(type);
|
|
||||||
var columns = string.Join(", ",
|
|
||||||
GetProperties(type)
|
|
||||||
.Select(p => p.GetCustomAttribute<ColumnAttribute>()!.ColumnName));
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
var whereClause = $"{primaryKey.GetCustomAttribute<ColumnAttribute>()!.ColumnName} = @{primaryKey.Name}";
|
|
||||||
|
|
||||||
return $"SELECT {columns} FROM {tableName} WHERE {whereClause}";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<T> SelectAll<T>() where T : SqlTable, new()
|
|
||||||
{
|
|
||||||
var type = typeof(T);
|
|
||||||
var selectSql = GetSelectSql(type);
|
|
||||||
|
|
||||||
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
|
||||||
connection.Open(); // 确保在执行命令之前打开连接
|
|
||||||
using var command = new MySqlCommand(selectSql, connection);
|
|
||||||
using var reader = command.ExecuteReader();
|
|
||||||
var results = new List<T>();
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
var item = new T();
|
|
||||||
PopulateObject(reader, item);
|
|
||||||
results.Add(item);
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void PopulateObject(MySqlDataReader reader, SqlTable obj)
|
|
||||||
{
|
|
||||||
var type = obj.GetType();
|
|
||||||
foreach (var property in GetProperties(type))
|
|
||||||
{
|
|
||||||
var columnAttr = property.GetCustomAttribute<ColumnAttribute>()!;
|
|
||||||
var value = reader[columnAttr.ColumnName];
|
|
||||||
if (value != DBNull.Value)
|
|
||||||
{
|
|
||||||
property.SetValue(obj, Convert.ChangeType(value, property.PropertyType));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T? Get<T>(object key) where T : SqlTable, new()
|
|
||||||
{
|
|
||||||
var type = typeof(T);
|
|
||||||
var selectSql = GetSelectSqlWithPrimaryKey(type);
|
|
||||||
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
|
||||||
connection.Open(); // 确保在执行命令之前打开连接
|
|
||||||
using var command = new MySqlCommand(selectSql, connection);
|
|
||||||
var primaryKey = GetPrimaryKeyProperties(type);
|
|
||||||
command.Parameters.AddWithValue("@" + primaryKey.GetCustomAttribute<ColumnAttribute>()!.ColumnName, key);
|
|
||||||
using var reader = command.ExecuteReader();
|
|
||||||
while (reader.Read())
|
|
||||||
{
|
|
||||||
var item = new T();
|
|
||||||
PopulateObject(reader, item);
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,81 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using MySql.Data.MySqlClient;
|
|
||||||
using OMS.NET.Common;
|
|
||||||
namespace OMS.NET.DbClass
|
|
||||||
{
|
|
||||||
public class SqlTable
|
|
||||||
{
|
|
||||||
public void Test()
|
|
||||||
{
|
|
||||||
Console.WriteLine("===========this is a test area=================");
|
|
||||||
Console.WriteLine(SqlHelper.GetInsertSql(GetType()));
|
|
||||||
Console.WriteLine(SqlHelper.GetDeleteSql(GetType()));
|
|
||||||
Console.WriteLine(SqlHelper.GetUpdateSql(GetType()));
|
|
||||||
Console.WriteLine(SqlHelper.GetSelectSql(GetType()));
|
|
||||||
Console.WriteLine(SqlHelper.GetSelectSqlWithPrimaryKey(GetType()));
|
|
||||||
Console.WriteLine("===========this is a test area=================");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 将对象本身插入到数据库中
|
|
||||||
/// </summary>
|
|
||||||
public virtual void Insert()
|
|
||||||
{
|
|
||||||
var type = GetType();
|
|
||||||
var insertSql = SqlHelper.GetInsertSql(GetType());
|
|
||||||
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
|
||||||
connection.Open(); //确保在执行命令之前打开连接
|
|
||||||
using var command = new MySqlCommand(insertSql, connection);
|
|
||||||
AddParameters(command);
|
|
||||||
Console.WriteLine($"SQL: {command.CommandText}");
|
|
||||||
foreach (MySqlParameter param in command.Parameters)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Parameter: {param.ParameterName}, Value: {param.Value}");
|
|
||||||
}
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
Log.Info($"{SqlHelper.GetTableName(type)}数据表插入({string.Join(',', ShowDetail())})");
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Update()
|
|
||||||
{
|
|
||||||
var type = GetType();
|
|
||||||
var updateSql = SqlHelper.GetUpdateSql(GetType());
|
|
||||||
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
|
||||||
connection.Open();
|
|
||||||
using var command = new MySqlCommand(updateSql, connection);
|
|
||||||
AddParameters(command);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
Log.Info($"{SqlHelper.GetTableName(type)}数据表修改({string.Join(',', ShowDetail())})");
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Delete()
|
|
||||||
{
|
|
||||||
var deleteSql = SqlHelper.GetDeleteSql(GetType());
|
|
||||||
using MySqlConnection connection = new(GlobalArea.ConnectionStringWithDbName);
|
|
||||||
connection.Open();
|
|
||||||
using var command = new MySqlCommand(deleteSql, connection);
|
|
||||||
AddParameters(command);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
Log.Info($"{SqlHelper.GetTableName(GetType())}数据表删除({string.Join(',', ShowDetail())})");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddParameters(MySqlCommand command)
|
|
||||||
{
|
|
||||||
//bool IsIdentity = SqlHelper.IsIdentity(GetType());
|
|
||||||
foreach (var property in SqlHelper.GetProperties(GetType()))
|
|
||||||
{
|
|
||||||
if (property.GetCustomAttribute<ColumnAttribute>()!.IsIdentity)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
command.Parameters.AddWithValue("@" + property.Name, property.GetValue(this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<string> ShowDetail()
|
|
||||||
{
|
|
||||||
return SqlHelper.GetProperties(GetType()).Select(p => $"{p.Name}={p.GetValue(this)}");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
namespace OMS.NET.Instructs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 广播指令的基类
|
||||||
|
/// </summary>
|
||||||
|
public class BroadcastInstuct : Instruct
|
||||||
|
{
|
||||||
|
public BroadcastInstuct()
|
||||||
|
{
|
||||||
|
this.Type = "broadcast";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendCorrectInstuct : Instruct
|
||||||
|
{
|
||||||
|
public SendCorrectInstuct()
|
||||||
|
{
|
||||||
|
this.Type = "send_error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendErrorInstuct : Instruct
|
||||||
|
{
|
||||||
|
public SendErrorInstuct()
|
||||||
|
{
|
||||||
|
this.Type = "send_correct";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
using OMS.NET.DbClass;
|
||||||
|
|
||||||
|
namespace OMS.NET.Instructs
|
||||||
|
{
|
||||||
|
public class GetPresenceInstruct : Instruct
|
||||||
|
{
|
||||||
|
public GetPresenceInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "get_presence";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task Handler(string wsid)
|
||||||
|
{
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
if (GlobalArea.LoginCheckByID(wsid))
|
||||||
|
{
|
||||||
|
//获取所有在线用户,移除重复
|
||||||
|
List<string?> emails = GlobalArea.UserConnects.Where(u => u.UserEmail != null)
|
||||||
|
.Select(u => u.UserEmail).Distinct().ToList();
|
||||||
|
List<dynamic> allLoginUsers = new();
|
||||||
|
emails.ForEach(email =>
|
||||||
|
{
|
||||||
|
AccountData accountData = GlobalArea.GetLoginAccountData(email)!;
|
||||||
|
//由于是已登录用户,默认都能查询到值
|
||||||
|
allLoginUsers.Add(new
|
||||||
|
{
|
||||||
|
userEmail = accountData.UserEmail,
|
||||||
|
userQq = accountData.UserQQ,
|
||||||
|
userName = accountData.UserName,
|
||||||
|
headColor = accountData.HeadColor,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.ResponseOrBroadcastInstructs.Add(new SendPresenceInstruct()
|
||||||
|
{
|
||||||
|
IsResponse = true,
|
||||||
|
Data = allLoginUsers,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendPresenceInstruct : Instruct
|
||||||
|
{
|
||||||
|
public SendPresenceInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "send_presence";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
namespace OMS.NET.Instructs
|
||||||
|
{
|
||||||
|
public class GetServerConfigInstruct : Instruct
|
||||||
|
{
|
||||||
|
public GetServerConfigInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "get_serverConfig";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task Handler(string wsid)
|
||||||
|
{
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
this.ResponseOrBroadcastInstructs.Add(new SendServerConfigInstruct
|
||||||
|
{
|
||||||
|
IsResponse = true,
|
||||||
|
Data = new
|
||||||
|
{
|
||||||
|
anonymous_login = bool.TryParse(GlobalArea.ServerConfig.AnonymousLogin, out bool booleanValue) && booleanValue,
|
||||||
|
key = GlobalArea.ServerConfig.Key,
|
||||||
|
url = GlobalArea.ServerConfig.Url,
|
||||||
|
name = GlobalArea.ServerConfig.Name,
|
||||||
|
online_number = GlobalArea.ConnectClientsCount,
|
||||||
|
max_online = GlobalArea.ServerConfig.MaxUser,
|
||||||
|
default_x = GlobalArea.ServerConfig.DefaultX,
|
||||||
|
default_y = GlobalArea.ServerConfig.DefaultY,
|
||||||
|
//以下在0.7会删除
|
||||||
|
enable_base_map = GlobalArea.ServerConfig.EnableBase,
|
||||||
|
//base_map_type= GlobalArea.ServerConfig.ServerConfigEnableBase,
|
||||||
|
max_zoom = GlobalArea.ServerConfig.MaxZoom,
|
||||||
|
min_zoom = GlobalArea.ServerConfig.MinZoom,
|
||||||
|
default_zoom = GlobalArea.ServerConfig.DefaultZoom,
|
||||||
|
base_map_url = GlobalArea.ServerConfig.BaseMapUrl
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendServerConfigInstruct : Instruct
|
||||||
|
{
|
||||||
|
public SendServerConfigInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "send_serverConfig";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
using System.Globalization;
|
||||||
|
using WebSocketSharp;
|
||||||
|
|
||||||
|
namespace OMS.NET.Instructs
|
||||||
|
{
|
||||||
|
public class GetServerImgInstruct : Instruct
|
||||||
|
{
|
||||||
|
public GetServerImgInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "get_serverImg";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task Handler(string wsid)
|
||||||
|
{
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
if (this.Time != null)
|
||||||
|
{
|
||||||
|
//时间解析
|
||||||
|
string format = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
DateTime clientDateTime = DateTime.ParseExact(this.Time, format, CultureInfo.InvariantCulture);
|
||||||
|
//Console.WriteLine("Converted DateTime: " + clientDateTime);
|
||||||
|
string serverImgPath = GlobalArea.ServerConfig.Img;
|
||||||
|
if (File.Exists(serverImgPath))
|
||||||
|
{
|
||||||
|
DateTime serverImgLastModified = File.GetLastWriteTime(serverImgPath);
|
||||||
|
Instruct res = new SendServerConfigInstruct
|
||||||
|
{
|
||||||
|
IsResponse = true
|
||||||
|
};
|
||||||
|
if (serverImgLastModified > clientDateTime)
|
||||||
|
{
|
||||||
|
byte[] imageBytes = File.ReadAllBytes(serverImgPath);
|
||||||
|
string imageFileType = GetImageFileType(imageBytes);
|
||||||
|
string base64String = $"data:image/{imageFileType};base64," + Convert.ToBase64String(imageBytes);
|
||||||
|
//Console.WriteLine("Base64 Encoded Image: " + base64String);
|
||||||
|
res.Data = new
|
||||||
|
{
|
||||||
|
@string = base64String,
|
||||||
|
time = serverImgLastModified.ToString(format),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res.Data = new
|
||||||
|
{
|
||||||
|
@string = ""
|
||||||
|
};
|
||||||
|
}
|
||||||
|
this.ResponseOrBroadcastInstructs.Add(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static string GetImageFileType(byte[] imageBytes)
|
||||||
|
{
|
||||||
|
byte[] fileHeader = imageBytes.SubArray(0, 8);
|
||||||
|
|
||||||
|
// PNG 文件的文件头字节为 89 50 4E 47 0D 0A 1A 0A
|
||||||
|
if (fileHeader[0] == 0x89 && fileHeader[1] == 0x50 && fileHeader[2] == 0x4E && fileHeader[3] == 0x47 &&
|
||||||
|
fileHeader[4] == 0x0D && fileHeader[5] == 0x0A && fileHeader[6] == 0x1A && fileHeader[7] == 0x0A)
|
||||||
|
{
|
||||||
|
return "png";
|
||||||
|
}
|
||||||
|
|
||||||
|
// JPEG 文件的文件头字节为 FF D8 FF
|
||||||
|
if (fileHeader[0] == 0xFF && fileHeader[1] == 0xD8 && fileHeader[2] == 0xFF)
|
||||||
|
{
|
||||||
|
return "jpeg";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SendServerImgInstruct : Instruct
|
||||||
|
{
|
||||||
|
public SendServerImgInstruct()
|
||||||
|
{
|
||||||
|
this.Type = "send_serverImg";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
namespace OMS.NET.Instructs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用于测试和代码复制
|
||||||
|
/// </summary>
|
||||||
|
public class PingInstuct : Instruct
|
||||||
|
{
|
||||||
|
public PingInstuct()
|
||||||
|
{
|
||||||
|
this.Type = "ping";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task Handler(string wsid)
|
||||||
|
{
|
||||||
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
this.ResponseOrBroadcastInstructs.Add(new PongInstuct()
|
||||||
|
{
|
||||||
|
IsResponse = true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PongInstuct : Instruct
|
||||||
|
{
|
||||||
|
public PongInstuct()
|
||||||
|
{
|
||||||
|
this.Type = "pong";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,40 @@
|
|||||||
CREATE TABLE IF NOT EXISTS map_data (
|
CREATE TABLE IF NOT EXISTS map_0_data (
|
||||||
id VARCHAR(255) NOT NULL,
|
id BIGINT(20) NOT NULL AUTO_INCREMENT,
|
||||||
name VARCHAR(255) NOT NULL,
|
type VARCHAR(12) NOT NULL,
|
||||||
description VARCHAR(255) NOT NULL,
|
points MEDIUMTEXT NOT NULL,
|
||||||
|
point VARCHAR(255) NOT NULL,
|
||||||
|
color VARCHAR(255),
|
||||||
|
phase INT(1) NOT NULL,
|
||||||
|
width INT(11),
|
||||||
|
child_relations MEDIUMTEXT,
|
||||||
|
father_relations VARCHAR(255),
|
||||||
|
child_nodes MEDIUMTEXT,
|
||||||
|
father_node VARCHAR(255),
|
||||||
|
details MEDIUMTEXT,
|
||||||
|
custom MEDIUMTEXT,
|
||||||
PRIMARY KEY (id)
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS map_0_layer (
|
||||||
|
id BIGINT(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
type VARCHAR(255) NOT NULL,
|
||||||
|
members MEDIUMTEXT NOT NULL,
|
||||||
|
structure MEDIUMTEXT NOT NULL,
|
||||||
|
phase INT(1) NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS account_data (
|
||||||
|
user_email VARCHAR(255) NOT NULL,
|
||||||
|
user_name VARCHAR(255) NOT NULL,
|
||||||
|
pass_word VARCHAR(255) NOT NULL,
|
||||||
|
map_layer INT(11),
|
||||||
|
default_a1 VARCHAR(255),
|
||||||
|
save_point MEDIUMTEXT,
|
||||||
|
user_qq VARCHAR(255),
|
||||||
|
head_color VARCHAR(6),
|
||||||
|
mode INT(1) NOT NULL,
|
||||||
|
phase INT(1) NOT NULL,
|
||||||
|
custom MEDIUMTEXT,
|
||||||
|
PRIMARY KEY (user_email)
|
||||||
);
|
);
|
||||||
Loading…
Reference in New Issue