新增心跳封包模組

This commit is contained in:
jasonchenwork 2025-05-14 16:25:24 +08:00
parent 91fad6df31
commit fcd901c613
3 changed files with 48 additions and 5 deletions

39
HeartbeatSender.cs Normal file
View File

@ -0,0 +1,39 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Timers;
namespace HeartbeatSender{
public class heartbeatSender
{
private readonly UdpClient udpClient;
private readonly IPEndPoint remoteEndPoint;
private readonly System.Timers.Timer heartbeatTimer;
public IPEndPoint RemoteEndPoint => remoteEndPoint;
public heartbeatSender(string targetIp, int targetPort, int intervalMilliseconds = 3000)
{
udpClient = new UdpClient();
// 設置 IP 和 PORT
remoteEndPoint = new IPEndPoint(IPAddress.Parse(targetIp), targetPort);
heartbeatTimer = new System.Timers.Timer(intervalMilliseconds);
heartbeatTimer.Elapsed += SendHeartbeat;
heartbeatTimer.AutoReset = true;
}
private void SendHeartbeat(object sender, ElapsedEventArgs e)
{
try
{
string heartbeatMessage = "HEARTBEAT";
byte[] data = Encoding.UTF8.GetBytes(heartbeatMessage);
udpClient.Send(data, data.Length, remoteEndPoint);
Console.WriteLine($"Heartbeat sent to {remoteEndPoint.Address}:{remoteEndPoint.Port}");
}
catch (Exception ex)
{
Console.WriteLine($"Error sending heartbeat: {ex.Message}");
}
}
public void Start() => heartbeatTimer.Start();
public void Stop() => heartbeatTimer.Stop();
}
}

View File

@ -385,13 +385,13 @@ namespace DualScreenDemo
// 若播放公播歌單,代表已點歌曲皆已播放完畢
hasBeenPlayed = true;
songLabel.ForeColor = Color.Gray;
statusText = IsSimplified ? "(播毕)" : "(播畢播畢)";
statusText = IsSimplified ? "(播毕)" : "(播畢)";
}
else
{
// 計算已完成播放的歌曲數量
int completedCount = currentSongIndexInHistory;
Console.WriteLine("currentSongIndexInHistory:" + currentSongIndexInHistory);
//Console.WriteLine("currentSongIndexInHistory:" + currentSongIndexInHistory);
// 遍歷已點歌曲歷史
/*for (int i = 0; i <= currentSongIndexInHistory && i < playedSongsHistory.Count; i++) {
if (i == currentSongIndexInHistory) {
@ -414,14 +414,14 @@ namespace DualScreenDemo
// 已播放完成
hasBeenPlayed = true;
songLabel.ForeColor = Color.Gray;
statusText = IsSimplified ? "(播毕)" : "(播畢播畢)";
statusText = IsSimplified ? "(播毕)" : "(播畢)";
}
else if (songPosition == completedCount)
{
// 正在播放
isCurrentlyPlaying = true;
songLabel.ForeColor = Color.LimeGreen;
statusText = IsSimplified ? "(播放中)" : "(播放中播放中)";
statusText = IsSimplified ? "(播放中)" : "(播放中)";
}
else
{

View File

@ -4,8 +4,8 @@ using System.Text;
using System.Text.RegularExpressions;
using System.IO; // 為 Path 和 File 提供支持
using DBObj;
using System.Diagnostics;
using OverlayFormObj;
using HeartbeatSender;
namespace DualScreenDemo
{
public class TCPServer
@ -82,6 +82,10 @@ namespace DualScreenDemo
{
listener.Start();
Console.WriteLine("Server started on port " + Port + ".");
// 心跳封包
//heartbeatSender sender = new heartbeatSender("127.0.0.1", 8888);
//sender.Start();
// Console.WriteLine($"heart beat for server{sender.RemoteEndPoint.Address}:{sender.RemoteEndPoint.Port}");
try {
string stateFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"txt","states.txt");
string initialState = ReadStateFile(stateFilePath);