Compare commits

..

3 Commits

Author SHA1 Message Date
Yue-bin
898a031bb2 feat(Helper): 添加时间存储和计时器功能
新增TimeStore类用于统一管理时间戳,提供毫秒级时间获取功能。
新增Timer类用于计算时间间隔。
在Plugin中添加Update方法调用TimeStore.UpdateTime()进行时间更新。
2026-04-18 06:42:37 +08:00
Yue-bin
adbfe31dae feat(Protocol): 为Hello类的Send方法添加重试和超时参数
暂时懒得实现重试和超时功能,先添加retryTimes和timeoutMs可选参数,
以便后续实现重试机制和超时控制功能
2026-04-18 06:42:22 +08:00
Yue-bin
aade13e6c5 docs(plan.md): 移除握手包快捷键并调整重传策略 2026-04-18 06:42:01 +08:00
5 changed files with 45 additions and 3 deletions

16
Helper/TimeStore.cs Normal file
View File

@@ -0,0 +1,16 @@
using System;
namespace stick.plugins.kcpable.Helper;
public static class TimeStore
{
private static readonly DateTime Epoch = DateTime.UtcNow;
private static ulong _savedTimeMs;
public static void UpdateTime()
{
_savedTimeMs = (ulong)(DateTime.UtcNow - Epoch).TotalMilliseconds;
}
public static ulong GetTimeMs() => _savedTimeMs;
}

16
Helper/Timer.cs Normal file
View File

@@ -0,0 +1,16 @@
namespace stick.plugins.kcpable.Helper;
public class Timer
{
private ulong _startTimeMs;
public void Start()
{
_startTimeMs = TimeStore.GetTimeMs();
}
public ulong ElapsedMs()
{
return TimeStore.GetTimeMs() - _startTimeMs;
}
}

View File

@@ -6,6 +6,7 @@ using UnityEngine;
using Steamworks;
using HarmonyLib;
using System.Data;
using stick.plugins.kcpable.Helper;
namespace stick.plugins.kcpable;
@@ -13,6 +14,9 @@ namespace stick.plugins.kcpable;
[BepInProcess("StickFight.exe")]
public class Plugin : BaseUnityPlugin
{
void Update()
{
TimeStore.UpdateTime();
}
}

View File

@@ -6,7 +6,11 @@ namespace stick.plugins.kcpable.Protocol;
public class Hello
{
public byte version = Const.version;
public void Send(P2PPackageHandler p2pHandler, NetConnection user)
// 暂时懒得实现重试和超时
// 事实上我甚至没想好要不要在这层实现
// 先留个可选参数
public void Send(P2PPackageHandler p2pHandler, NetConnection user, ushort retryTimes = 3, ulong timeoutMs = 5000)
{
p2pHandler.SendSocketP2PPacketToUser(user, [version], (P2PPackageHandler.MsgType)MsgType.Hello);
}

View File

@@ -36,8 +36,10 @@
- 主动行为(发送)
- 进入房间时向所有人发送请求协议升级的握手包~~(考虑重复三次以规避高丢包场景)~~
*还是算了因为默认的tcp本来就会保证送达改成超时重传最多重传三次吧*
*暂时懒得实现*
- 房间里有新人进入时亦然
- 同时增加发送握手包快捷键以主动向所有人发送握手包加上频率限制防止手动flood
- ~~同时增加发送握手包快捷键以主动向所有人发送握手包加上频率限制防止手动flood~~
*不行因为这样事实上引入了握手流程因为升级到kcp的请求结果是不可知的*
- 被动行为(接收)
- 若在收到合法握手包:
- 若与来源客户端正使用`tcp`连接则对其启用`kcp`连接