简要概述
在我们深入了解DarkRift的艺术之前,我们应该先探索DarkRift的运作方式。
DarkRift使用插件来实现所有的服务器端逻辑。您可以像开发标准的.NET库一样编写插件,然后将生成的DLL文件放入DarkRift的“插件”目录中。DarkRift提供了大量API来管理客户端和发送消息等操作,并提供事件来通知您的插件客户端何时连接、发送消息等等。
与服务器代码相关的一切都在DarkRift.Server命名空间中,与客户端相关的一切都在DarkRift.Client中,而两者都使用的内容则在DarkRift中。
设置插件
在Visual Studio中创建一个新的C#类库项目,命名为“AgarPlugin”,并添加对DarkRift.Server.dll和DarkRift.dll的引用。
警告
如果您使用的是DarkRift的免费版本,则需要创建一个.NET Framework插件,只有Pro版本的.NET Core构建支持.NET Core/Standard插件。
将默认类重命名为AgarPlayerManager,并相应地重命名文件。在文件的顶部添加using指令(using DarkRift; 和 using DarkRift.Server;),以便我们可以访问DarkRift.Server和DarkRift命名空间。
DarkRift中的所有插件都必须继承自DarkRift.Server.Plugin,以便DarkRift可以正确地发现和实例化它们,并且可以轻松地读取有关插件的详细信息。这也是您进入DarkRift API的入口,以便在正确的服务器实例上进行更改。
请让AgarPlayerManager从Plugin继承,您会注意到Visual Studio会抛出一个错误,说没有构造函数,请添加它。然后您会注意到它说它没有实现一些抽象属性,请再次添加它们。如果您跟着做,您应该有一个像这样的类:
public class AgarPlayerManager : Plugin
{
public AgarPlayerManager(PluginLoadData pluginLoadData) : base(pluginLoadData)
{
}
public override bool ThreadSafe
{
get
{
throw new NotImplementedException();
}
}
public override Version Version
{
get
{
throw new NotImplementedException();
}
}
}
自动生成的属性应该是相当易于理解的。在实现它们时,请记住以下几点
Version 应该遵循语义化版本控制(除非您真的不喜欢最佳实践)。它用于触发插件的升级(我们稍后会介绍),因此您应该现在给它一个默认值。
ThreadSafe 指示您的程序是否可以处理多线程事件以提高性能。由于我不会涉及任何多线程,所以将其设置为false。如果您了解多线程,那么在最后启用多线程可能是一个不错的练习!
经过一些格式化,我们应该有以下代码:
public class AgarPlayerManager : Plugin
{
public override bool ThreadSafe => false;
public override Version Version => new Version(1, 0, 0);
public AgarPlayerManager(PluginLoadData pluginLoadData) : base(pluginLoadData)
{
}
}
如果您想要尝试,您可以构建该库并将DLL放在DarkRift的插件文件夹中,当您启动DarkRift时,您应该会看到您的插件被加载进来!