• 中文
  • 注册
  • 技术交流 技术交流 关注:3 内容:13

    OpenMod插件的存储服务

  • 查看作者
  • 打赏作者
  • 当前位置: 未转变者中文社区 > 技术交流 > 正文
    • 技术交流
    • 搬运自OpenMod官网,经过翻译,可能有些不足,欢迎指正!原文链接

      存储

      IDataStore服务提供了一种保存和加载持久数据的方法。

      默认数据存储使用yaml文件进行序列化。

      读写数据

      假设要保存并加载以下类:

      [Serializable]
      public class PlayersData
      {
         public List<string> OwnerNames { get; set; }
      }

      ——————————————————————————————

      public class MyPlugin : OpenModUniversalPlugin
      {
          // Defines the key for the data. The default data store uses the key as the file name for the yaml file.
          // In this case, the file will be named owners.data.yaml
          public const string OwnersKey = "owners";
          private readonly IDataStore m_DataStore;
          
          public MyPlugin(IDataStore dataStore, IServiceProvider serviceProvider) : base(serviceProvider)
          {
              m_DataStore = dataStore;
          }
            
          public async Task OnLoadAsync()
          {
              // first check if the data exists and create it if it does not exist
              if(!await m_DataStore.ExistsAsync(OwnersKey))
              {
                  await SeedData();
              }
             
              var data = await m_DataStore.LoadAsync<PlayersData>(OwnersKey);        
              // do something with data
              await m_DataStore.SaveAsync<PlayersData>(OwnersKey, data);
          }
          private async Task SeedData()
          {
              // create default data
              await m_DataStore.SaveAsync(OwnersKey, new PlayersData
              {
                  OwnerNames = new List<string> { "Trojaner" }
              });
          } 
      }

      更改观察者

      当密钥的数据发生更改时(例如,如果用户手动编辑了文件),可以使用更改观察程序自动重新加载数据:

      var fileChangeWatcher = m_DataStore.AddChangeWatcher(OwnersKey, this, OnOwnersChanged);
         
      public void OnOwnersChanged()
      {
          // 做一些事情,例如再次使用LoadAsync读取数据。
      }

      你可以用fileChangeWatcher.Dispose()停止监听。

      命名IDataStore.SaveAsync不会触发更改观察者。

      请登录之后再进行评论

      登录
      极客之爱
      个人签名:收容失效服务器群组QQ群:1037114248
      关注2 粉丝1 喜欢2内容14
      上海
    • 做任务
    • 实时动态
    • 签到中心
      小黑屋
    • 到底部