帖子

Memorial Edition

查看: 801|回复: 0

ConnectX - 异地跨网联机 强大的跨平台MC P2P在线多人库

[复制链接]

Lv.2 采石匠

人气
10 点
金粒
59 粒
宝石
0 颗
爱心
0 颗
钻石
4 颗
贡献
0 点
发表于 2025-3-6 13:53:23 | 显示全部楼层 |阅读模式
LOGO
ConnectX
  • 概要
  • 授权信息

适用版本:

下载地址: https://github.com/Corona-Studio/ConnectX/


马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 CoronaStudio 于 2025-3-6 14:09 编辑

ConnectX

README in English

CodeFactor GradeGitHubMaintenanceGitHub commit activityGitHub closed pull requestsGitHub repo sizeDotNet VersionGitHub Actions Workflow Status

一个跨平台的 Minecraft P2P 在线多人库,支持异地跨网联机,采用 C# 开发,使用高性能套接字实现出色的转发性能,由 Zerotier SDK 实现 P2P 功能。

由我们的另一个开源项目提供支持: Hive.Framework

Demo Screenshot

架构图

ConnectX cn drawio
ConnectX cn dark drawio

快速开始!

我们使用 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);
    // ...
}

如何使用?

IServerLinkHolderClient 注入要管理房间实例的 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 actions

开源协议

MIT。这意味着您可以出于任何目的修改或使用我们的代码,但您的软件的所有副本或重要部分都应包含版权声明和许可声明。

统计信息

Alt

免责声明

ConnectX 与 Mojang 或其软件的任何部分均无关联。

耻辱柱

在此,我们将列出所有使用我们的代码但未遵守 MIT 许可的程序。

官网主站:corona.studio
官网MIN:[url=https://min.corona.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

人生总是聚少离多,我至今仍然无法习惯。

Archiver|小黑屋| MCBBS纪念版 ( 新ICP备2024014954号|兵公网安备66010002000149号 )|隐私政策| 手机版

GMT+8, 2025-3-31 14:54 , Processed in 0.125381 second(s), 18 queries , Redis On.

"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

© 2010-2025 MCBBS纪念版 版权所有 本站内原创内容版权属于其原创作者,除作者或版规特别声明外未经许可不得转载

返回顶部