unity学习(48)——服务器三次注册限制以及数据库化角色信息3--数据流程

1.经过一系列调试,定位到UserCache.cs中的put函数,内容如下:

cs 复制代码
public void put(string accId, PlayerModel model)
{
  if (this.userPlayerIds.ContainsKey(accId))
  {
    List<string> stringList;
    this.userPlayerIds.TryGetValue(accId, out stringList);//得到已有的角色id(player)
    stringList.Add(model.id);//新加一个
  }
  else
    this.userPlayerIds.TryAdd(accId, new List<string>()
    {
      model.id
    });
  this.players.TryAdd(model.id, model);//最后真正怎加角色信息 player=角色 account=账号
}

2.TryAdd是系统函数,所以最终的结果就存在this.player中!跳转到其定义位置

3.把之前账号密码服务器化的技巧应用过来:

ctrf+f可以进行查找,快速找到之前账号密码的数据库化部分:

4.账号密码写入部分的代码如下:

cs 复制代码
      bool r=this.accounts.TryAdd(userName, accountModel);
      if (r)
      {
          Console.WriteLine("成功注册时,写入文件");
          StreamWriter file = new StreamWriter("login.txt");
          string json = JsonConvert.SerializeObject(this.accounts);
          Console.WriteLine("字典转json之后的内容:"+ json);
          file.Write(json);
          file.Close();
      }

字典的TryAdd操作之后进行文件写入。

5.账号密码初始化部分的代码如下:自建data初始化函数。

cs 复制代码
    public static ConcurrentDictionary<string, AccountModel> data()//这样好像就行了
{
        StreamReader file = new StreamReader("login.txt");
        string all = file.ReadToEnd();
        file.Close();

        ConcurrentDictionary<string, AccountModel> results = JsonConvert.DeserializeObject<ConcurrentDictionary<string, AccountModel>>(JsonConvert.DeserializeObject(all).ToString());
       
        return results;
    }

data函数的调用位置:

6.角色信息的读取部分的代码如下:

cs 复制代码
private ConcurrentDictionary<string, List<string>> userPlayerIds = dataUserPlayerIds();
//private ConcurrentDictionary<string, List<string>> userPlayerIds = new ConcurrentDictionary<string, List<string>>();
//private ConcurrentDictionary<string, PlayerModel> players = new ConcurrentDictionary<string, PlayerModel>();
private ConcurrentDictionary<string, PlayerModel> players = dataPlayers();

public static ConcurrentDictionary<string, List<string>> dataUserPlayerIds()//这样好像就行了
{
    StreamReader file = new StreamReader("userPlayerIds.txt");
    string all = file.ReadToEnd();
    file.Close();
    ConcurrentDictionary<string, List<string>> results = JsonConvert.DeserializeObject<ConcurrentDictionary<string, List<string>>>(JsonConvert.DeserializeObject(all).ToString());
    return results;
    //return JsonConvert.DeserializeObject(all);
}
public static ConcurrentDictionary<string, PlayerModel> dataPlayers()//这样好像就行了
{
    StreamReader file = new StreamReader("players.txt");
    string all = file.ReadToEnd();
    file.Close();
    ConcurrentDictionary<string, PlayerModel> results = JsonConvert.DeserializeObject<ConcurrentDictionary<string, PlayerModel>>(JsonConvert.DeserializeObject(all).ToString());
    return results;
    //return JsonConvert.DeserializeObject(all);
}

7.角色信息的写入部分的代码如下:

cs 复制代码
    public void put(string accId, PlayerModel model)
{
        if (this.userPlayerIds.ContainsKey(accId))
        {
            List<string> stringList;
            this.userPlayerIds.TryGetValue(accId, out stringList);//得到已有的角色id(player)
            stringList.Add(model.id);//新加一个
        }
        else
        {
            bool ur=this.userPlayerIds.TryAdd(accId, new List<string>()
    {
      model.id
    });
            if (ur)
            {
                StreamWriter file = new StreamWriter("userPlayerIds.txt");
                string json = JsonConvert.SerializeObject(this.userPlayerIds);
                Console.WriteLine("userPlayerIds.TryAdd:" + json);
                file.Write(json);
                file.Close();
            }
        }
  bool pr=this.players.TryAdd(model.id, model);//最后真正怎加角色信息 player=角色 account=账号
        //将角色详细信息写入文件
        if (pr)
        {
            StreamWriter file = new StreamWriter("players.txt");
            string json = JsonConvert.SerializeObject(this.players);
            Console.WriteLine("players.TryAdd:" + json);
            file.Write(json);
            file.Close();
        }
    }

8.调试出现异常!

9.调试解决异常:提前手动创建2个txt文件即可。

10.出现新的异常:应该是第一次读取文件时存在问题。

相关推荐
外收内放11 小时前
面向对象高级(实战案例)
开发语言·python·学习
薛定e的猫咪12 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪13 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
郝学胜-神的一滴15 小时前
游戏设计:原型与开发 08:我们到底在为谁做游戏
程序人生·游戏·游戏引擎·游戏开发·游戏策划
别动我齐刘海16 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
五仁烧饼16 小时前
动手学 Shader Graph(二):溶解与边缘发光
游戏·unity·shader·shader graph
一直C16 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
承渊政道17 小时前
Linux网络学习【传输层协议UDP】
linux·网络·网络协议·学习·ubuntu·udp
andrsted17 小时前
练题簿免费刷题小程序:和学习搭子共用一份题库,一起刷题复习
学习·面试·微信小程序·小程序·学习方法·刷题
淡海水17 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc