当前位置:   article > 正文

unity学习(42)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——服务器收包1

unity学习(42)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——服务器收包1

1.首先保证服务器接受到的信息正确,在服务器的LogicHandler.cs中做第一次分拣:

  1. public void process(Session session, SocketModel model)
  2. {
  3. try
  4. {
  5. switch (model.Type)
  6. {
  7. case 0:
  8. LoginHandler.getInstance().process(session, model);
  9. break;
  10. case 1:
  11. MapHandler.getInstance().process(session, model);
  12. break;
  13. case 2:
  14. UserHandler.getInstance().process(session, model);
  15. break;
  16. }
  17. }
  18. catch (Exception ex)
  19. {
  20. //MyLog.form.textAdd(ex.Message);
  21. Console.WriteLine(ex.Message);
  22. }
  23. }

2.当前客户端发出的command=2(UserProtocol.CREATE_CREQ)

NetWorkScript.getInstance().sendMessage(Protocol.USER,0,UserProtocol.CREATE_CREQ,message);

3.然后去全局static类,UserHandler中对应的处理单元:

  1. public void process(Session session, SocketModel model)
  2. {
  3. switch (model.Command)
  4. {
  5. case 0:
  6. this.list(session);
  7. break;
  8. case 2:
  9. this.create(session, model);
  10. break;
  11. case 4:
  12. this.select(session, model);
  13. break;
  14. case 6:
  15. this.remove(session, model);
  16. break;
  17. }
  18. }
  1. private void create(Session session, SocketModel model)
  2. {
  3. Console.WriteLine("UserHandler.create");
  4. string accId = OnLineUtil.getAccId(session);
  5. Console.WriteLine(accId);
  6. CreateDTO createDto = Coding<CreateDTO>.decode(model.Message);
  7. Console.WriteLine(model.Message);
  8. session.write(2, 0, 3, (object) BizUtil.user.create(accId, createDto.name, createDto.job));
  9. }

逆向出来的服务器,在这个单元是存在问题的 

4.本意是给对应键的部分增加2个值,而现在却查不到键。

  1. public static string getAccId(Session session)
  2. {
  3. string accId = "";
  4. bool r=OnLineUtil.sessionToAcc.TryGetValue(session, out accId);
  5. Console.WriteLine(r);
  6. return accId;
  7. }

排查问题出在getAccId函数内,这个函数在之前的注册登录时没有用过,整个项目的4次调用全在UserHandler中。

TryGetValue是根据key返回相应的数据到value,这个方法的返回是bool值,如果dictionary里有存在相应的key为true,没有存在,则为false。c#自带的应该是不会出问题的。所以推断问题出在OnLineUtil.sessionToAcc,估计这个字典大概率是空的。唯一增加OnLineUtil.sessionToAcc字典的函数只有accOnLine,的调用也只有唯一一处:

调试发现accOnLine可以成功通过TryAdd来增加字典!

问题就应该是两次的session不一样!这里的session应该是一个对象的地址!想办法输出来看看。

使用public DateTime idTime = DateTime.Now;,在不同的session对象创建时通过记录时间来做区别。得到结论,两处的session是不同的,所以根本不可能TryAdd后得到true

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/182328
推荐阅读
相关标签
  

闽ICP备14008679号