一个跨平台的 Minecraft P2P 在线多人库,支持异地跨网联机,采用 C# 开发,使用高性能套接字实现出色的转发性能,由 Zerotier SDK 实现 P2P 功能。
由我们的另一个开源项目提供支持: Hive.Framework
| 功能 | 状态 |
|---|---|
服务端: 将房间相关操作记录到本地数据库(合规用途) |
✅ |
服务端: 客户端/房间管理 |
✅ |
服务端: 中继服务器管理 |
✅ |
中继: 通过 Hive 实现的中继服务器 |
✅ |
客户端: 基于 ZT 的 P2P 联机实现 |
✅ |
客户端: 基于 ZT 的中继联机实现 |
✅ |
客户端: 基于 ConnectX 中继服务器的联机实现 |
✅ |
我们使用 MSDI(Microsoft.Extensions.DependencyInjection)作为 DI 容器。最佳做法是在程序中使用 .NET Generic Host。
首先,为服务器配置添加以下方法,ConnectXServerIp 将是 ConnectX.Server 的后台地址。
private static IClientSettingProvider GetConnectXSettings()
{
var serverIp = IPAddress.None;
try
{
var ips = Dns.GetHostAddresses(ConnectXServerIp);
var ipv4Addresses = ips
.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork)
.Where(ip => !ip.IsLocalIpAddress())
.ToArray();
if (ipv4Addresses.Length > 0)
serverIp = ipv4Addresses[0];
}
catch (Exception ex)
{
Log.Logger.Error(ex, "Failed to resolve ConnectX server IP.");
}
return new DefaultClientSettingProvider
{
ServerAddress = serverIp,
ServerPort = ConnectXServerPort,
JoinP2PNetwork = true
};
}然后,只需要再添加一行即可完成配置!
private static void ConfigureServices(IServiceCollection services)
{
// ...
+ services.UseConnectX(GetConnectXSettings);
// ...
}将 IServerLinkHolder 和 Client 注入要管理房间实例的 ViewModel 当中。
await _serverLinkHolder.ConnectAsync(CancellationToken.None);Important
请确保在执行任何房间操作前您已经成功和服务器建立了连接,否则可能会出现预期之外的结果!
await TaskHelper.WaitUntilAsync(() => _serverLinkHolder is { IsConnected: true, IsSignedIn: true });var message = new CreateGroup
{
UserId = _serverLinkHolder.UserId,
RoomName = createRoomRecord.RoomName,
RoomDescription = createRoomRecord.RoomDescription,
RoomPassword = createRoomRecord.RoomPassword,
IsPrivate = createRoomRecord.IsPrivateRoom,
MaxUserCount = 3
};
var (groupInfo, status, err) = await _multiPlayerClient.CreateGroupAsync(message, CancellationToken.None);
if (groupInfo == null || status != GroupCreationStatus.Succeeded || !string.IsNullOrEmpty(err))
{
// Error process
return;
}
_multiPlayerClient.OnGroupStateChanged += MultiPlayerClientOnGroupStateChanged;
// Other actionsMIT。这意味着您可以出于任何目的修改或使用我们的代码,但您的软件的所有副本或重要部分都应包含版权声明和许可声明。
ConnectX 与 Mojang 或其软件的任何部分均无关联。
本项目 ConnectX 采用 MIT 许可证 开源。
ConnectX 使用了 ZeroTier,该项目自 2025 年 1 月 1 日 起采用 Apache 2.0 许可证,此前为 BSL 1.1 许可证。您可以在 https://github.com/zerotier/ZeroTierOne 查看 ZeroTier 的许可信息。
在此,我们将列出所有使用我们的代码但未遵守 MIT 许可的程序。
