当前位置: 首页 > backend >正文

备份C#的两个类

GuestIP依赖项:

using System.Data.SQLite; //这是第三方依赖项,要从nuget下载
static class GuestIP
{public static void ReadLastGuestIP(string constr = "Data Source=guestip_log.db;"){using (var connection = new SQLiteConnection(constr)){connection.Open();using (var command = connection.CreateCommand()){command.CommandText = "SELECT * FROM ip_guest ORDER BY id DESC LIMIT 1;";using (var reader = command.ExecuteReader()){while (reader.Read()){var id = reader.GetInt32(0); // 假设id是第一列  var ts = reader.GetDateTime(1).AddHours(8); // 假设ts是第二列(日期时间)  //将UTC时间转换成北京时间 var ip = reader.GetString(2); // 假设ip是第三列(文本)  //var id = reader.GetInt32(reader.GetOrdinal("id"));//var ts = reader.GetDateTime(reader.GetOrdinal("ts"));//var ip = reader.GetString(reader.GetOrdinal("ip"));Console.WriteLine($"ID: {id}, Timestamp: {ts}, IP: {ip}");}}}connection.Close();connection.Dispose();}}/// <summary>/// 读取时间时将UTC时间处理成北京时间/// </summary>/// <param name="constr"></param>public static void ReadGuestIPlog(string constr = "Data Source=guestip_log.db;"){using (var connection = new SQLiteConnection(constr)){connection.Open();using (var command = connection.CreateCommand()){command.CommandText = "SELECT * FROM ip_guest";using (var reader = command.ExecuteReader()){while (reader.Read()){var id = reader.GetInt32(0); // 假设id是第一列  var ts = reader.GetDateTime(1).AddHours(8); // 假设ts是第二列(日期时间) //将UTC时间转换成北京时间 var ip = reader.GetString(2); // 假设ip是第三列(文本)  //var id = reader.GetInt32(reader.GetOrdinal("id"));//var ts = reader.GetDateTime(reader.GetOrdinal("ts"));//var ip = reader.GetString(reader.GetOrdinal("ip"));Console.WriteLine($"ID: {id}, Timestamp: {ts}, IP: {ip}");}}}connection.Close();connection.Dispose();}}/// <summary>/// 注意SQLite只存储UTC时间,读取时可以处理成北京时间。/// </summary>/// <param name="constr"></param>public static void CreateTableIfNotExists(string constr = "Data Source=guestip_log.db;"){using (var sqliteConnection = new SQLiteConnection(constr)){// 开始事务  var transaction = sqliteConnection.BeginTransaction();try{using (var command = sqliteConnection.CreateCommand()){command.Transaction = transaction;command.CommandText = @"  CREATE TABLE IF NOT EXISTS ip_guest (  id INTEGER PRIMARY KEY AUTOINCREMENT,  ts DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,ip TEXT NOT NULL  )";command.ExecuteNonQuery();// 提交事务  transaction.Commit();}}catch (Exception e){// 如果出现异常,则回滚事务  Console.WriteLine($"An error occurred: {e.Message}");transaction.Rollback();}sqliteConnection.Close();}}public static void RecordIpToDatabase(string ip, string constr = "Data Source=guestip_log.db;"){using (var sqliteConnection = new SQLiteConnection(constr)){sqliteConnection.Open();using (var command = sqliteConnection.CreateCommand()){// 开始事务  var transaction = sqliteConnection.BeginTransaction();try{command.Transaction = transaction;command.CommandText = @"  CREATE TABLE IF NOT EXISTS ip_guest (  id INTEGER PRIMARY KEY AUTOINCREMENT,  ts DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,ip TEXT NOT NULL  )";command.ExecuteNonQuery();command.CommandText = "INSERT INTO ip_guest (ip) VALUES (@ip)";command.Parameters.AddWithValue("@ip", ip);command.ExecuteNonQuery();// 提交事务  transaction.Commit();}catch (Exception e){// 如果出现异常,则回滚事务  Console.WriteLine($"An error occurred: {e.Message}");transaction.Rollback();}}sqliteConnection.Close();}}public static void RecordIpToDatabase(TcpClient client, string constr = "Data Source=guestip_log.db;"){try{string ipAddress = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();Console.WriteLine("Accepted connection from " + ipAddress);// 记录IP地址到SQLite数据库  RecordIpToDatabase(ipAddress, constr);}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);}}public static async Task RecordIpToDatabaseAsync(string ipAddress, string constr = "Data Source=guestip_log.db;"){using (var conection = new SQLiteConnection(constr)){await conection.OpenAsync();// 开始事务  var transaction = conection.BeginTransaction();using (var command = new SQLiteCommand()){command.Connection = conection;command.Transaction = transaction;command.CommandText = "INSERT INTO ip_guest (ip) VALUES (@ip)";command.Parameters.AddWithValue("@ip", ipAddress);await command.ExecuteNonQueryAsync();// 提交事务  transaction.Commit();}conection.Close();}}
}

Refresh依赖项:

using System.Collections.Generic;
using System.Timers;
using System;
public class Refresh
{private System.Timers.Timer timer = new System.Timers.Timer();private List<(Action updateMethod, int interval)> tasks = new List<(Action, int)>();public void AddTask(Action updateMethod, int interval){tasks.Add((updateMethod, interval));}public void StartTimer(){if (timer == null){this.timer = new System.Timers.Timer();}if (tasks.Count > 0){int gcdInterval = GCD(tasks.Select(t => t.interval).ToArray()); // 计算所有任务间隔时间的最大公约数timer.Interval = gcdInterval;}else{timer.Interval = 1000 * 10; // 默认时间间隔为1000*10毫秒,10秒}timer.Elapsed += OnTimedEvent;timer.AutoReset = true; // 设置为true,以便定时器在每次触发后自动重置timer.Enabled = true;timer.Start();}public void RestartTimer(){timer.Stop();if (tasks.Count > 0){int gcdInterval = GCD(tasks.Select(t => t.interval).ToArray()); // 计算所有任务间隔时间的最大公约数timer.Interval = gcdInterval;}else{timer.Interval = 1000 * 10; // 默认时间间隔为1000*10毫秒,10秒}timer.Elapsed += OnTimedEvent;timer.AutoReset = true; // 设置为true,以便定时器在每次触发后自动重置timer.Enabled = true;timer.Start();}public void StopTimer(){timer.Stop();timer.Dispose();}private void OnTimedEvent(Object source, ElapsedEventArgs e){foreach (var task in tasks){if (DateTime.Now.Ticks % task.interval == 0) // Check if it's time to run the task{try{task.updateMethod();}catch (Exception ex){// Log or handle exceptionConsole.WriteLine($"Error executing task: {ex.Message}");}}}}private int GCD(int a, int b){while (b != 0){int temp = b;b = a % b;a = temp;}return a;}private int GCD(int[] numbers){int result = numbers[0];for (int i = 1; i < numbers.Length; i++){result = GCD(result, numbers[i]);if (result == 1) // 如果GCD已经是1,则无需继续计算{break;}}return result;}
}

http://www.xdnf.cn/news/7139.html

相关文章:

  • 【DAY22】 复习日
  • 三、高级攻击工具与框架
  • React Flow 边的基础知识与示例:从基本属性到代码实例详解
  • 飞机飞行控制系统补偿模型辨识报告
  • HarmonyOS AVPlayer 音频播放器
  • 【2025软考高级架构师】——2022年11月份真题与解析
  • 【方法论】如何构建金字塔框架
  • C++ for QWidget:connect(连接)
  • C++ asio网络编程(8)处理粘包问题
  • Java IO及Netty框架学习小结
  • 学习黑客 http 响应头
  • Spark 基础自定义分区器
  • 游戏:英雄联盟游戏开发代码(谢苏)
  • 互联网大厂Java面试场景:从简单到复杂的技术深度解析
  • Java注解篇:@CrossOrigin
  • 鸿蒙AI开发:10-多模态大模型与原子化服务的集成
  • 大学之大:墨西哥国立自治大学2025.5.18
  • STM32项目实战:ADC采集
  • [原创工具] 小说写作软件
  • java springMVC+MyBatis项目1,服务端处理json,RequestBody注解,Form表单发送,JavaScript发送
  • 【量子计算与云架构】加密与算法革新展望
  • Python format()函数高级字符串格式化详解
  • LG P4722 LOJ 127 【模板】最大流 加强版 Solution
  • C语言练手磨时间
  • 编程速递:适用于 Delphi 12.3 的 FMX Linux 现已推出
  • C++面试2——C与C++的关系
  • 12.输出常量的两个小扩展
  • leetcode hot100刷题日记——2.字母异位词分组
  • 【第三篇】 SpringBoot项目中的属性配置
  • 中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行