首页 > 解决方案 > 跨项目活动

问题描述

我有 2 个项目充当网络服务器和游戏服务器。游戏服务器将网络服务器作为依赖项,因此我可以在代码中访问其文件,然后我想订阅网络服务器中的事件。

我有一个 Discord 机器人向网络服务器发送信息,而网络服务器又需要向游戏服务器发送数据。但是由于我无法从网络服务器访问游戏服务器文件,我在网络服务器中创建了一个静态事件,游戏服务器反过来订阅了该事件。但无论我做什么,该事件始终为空。甚至可以订阅这样的事件跨项目吗?

这是事件:

public static event EventHandler<CommandEventArgs> RecievedCommand = delegate{};

下面是调用方法:

public static void InvokeEvent(string exector, string command, string channel)
{
    if (!ulong.TryParse(exector, out var user))
    {
        Console.WriteLine("Not a user");
        return;
    }

    if (!ulong.TryParse(channel, out var from))
    {
        Console.WriteLine("not a channel");
        return;
    }
    Console.WriteLine("Full invoke");
    CommandEventArgs cmd = new CommandEventArgs();
    cmd.Channel = channel;
    cmd.Command = command;
    cmd.Executor = exector;
    RecievedCommand.Invoke(typeof(BotBridge), cmd);
}

在这里你可以看到我是如何调用它的:

if (query["execute"] != null)
{
    Console.WriteLine("Invoking");
    BotBridge.InvokeEvent(query["user"], query["command"], query["channel"]);
    Write(context, "Success!", false);
    return;
}

这是来自我订阅该事件的游戏服务器的图片。该事件在创建此类时已注册,因此我确定代码到达了该部分:

BotBridge.RecievedCommand += HandleBotCommand;
}

public void HandleBotCommand(object sender, CommandEventArgs e)
{

网络服务器在调用方法中到达 Console.Writeline("Full invoke") 但之后没有其他任何事情发生。有任何想法吗?

标签: c#events

解决方案


推荐阅读