Compare commits
3 Commits
0c012c8747
...
898a031bb2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
898a031bb2 | ||
|
|
adbfe31dae | ||
|
|
aade13e6c5 |
16
Helper/TimeStore.cs
Normal file
16
Helper/TimeStore.cs
Normal 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
16
Helper/Timer.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ using UnityEngine;
|
|||||||
using Steamworks;
|
using Steamworks;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using stick.plugins.kcpable.Helper;
|
||||||
|
|
||||||
namespace stick.plugins.kcpable;
|
namespace stick.plugins.kcpable;
|
||||||
|
|
||||||
@@ -13,6 +14,9 @@ namespace stick.plugins.kcpable;
|
|||||||
[BepInProcess("StickFight.exe")]
|
[BepInProcess("StickFight.exe")]
|
||||||
public class Plugin : BaseUnityPlugin
|
public class Plugin : BaseUnityPlugin
|
||||||
{
|
{
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
TimeStore.UpdateTime();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,11 @@ namespace stick.plugins.kcpable.Protocol;
|
|||||||
public class Hello
|
public class Hello
|
||||||
{
|
{
|
||||||
public byte version = Const.version;
|
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);
|
p2pHandler.SendSocketP2PPacketToUser(user, [version], (P2PPackageHandler.MsgType)MsgType.Hello);
|
||||||
}
|
}
|
||||||
|
|||||||
4
plan.md
4
plan.md
@@ -36,8 +36,10 @@
|
|||||||
- 主动行为(发送)
|
- 主动行为(发送)
|
||||||
- 进入房间时向所有人发送请求协议升级的握手包~~(考虑重复三次以规避高丢包场景)~~
|
- 进入房间时向所有人发送请求协议升级的握手包~~(考虑重复三次以规避高丢包场景)~~
|
||||||
*还是算了,因为默认的tcp本来就会保证送达,改成超时重传,最多重传三次吧*
|
*还是算了,因为默认的tcp本来就会保证送达,改成超时重传,最多重传三次吧*
|
||||||
|
*暂时懒得实现*
|
||||||
- 房间里有新人进入时亦然
|
- 房间里有新人进入时亦然
|
||||||
- 同时增加发送握手包快捷键以主动向所有人发送握手包(加上频率限制防止手动flood)
|
- ~~同时增加发送握手包快捷键以主动向所有人发送握手包(加上频率限制防止手动flood)~~
|
||||||
|
*不行,因为这样事实上引入了握手流程,因为升级到kcp的请求结果是不可知的*
|
||||||
- 被动行为(接收)
|
- 被动行为(接收)
|
||||||
- 若在收到合法握手包:
|
- 若在收到合法握手包:
|
||||||
- 若与来源客户端正使用`tcp`连接则对其启用`kcp`连接
|
- 若与来源客户端正使用`tcp`连接则对其启用`kcp`连接
|
||||||
|
|||||||
Reference in New Issue
Block a user