请选择 进入手机版 | 继续访问电脑版

NoahFrame

 找回密码
 Register Now
搜索
热搜: redis mysql tutorial
查看: 1328|回复: 1

小白知识点汇总,可能有坑,尽量填

[复制链接]

3

主题

4

帖子

31

积分

Newbie

Rank: 1

积分
31
QQ
发表于 2017-4-13 00:27:16 | 显示全部楼层 |阅读模式
本帖最后由 themoder 于 2017-4-13 00:32 编辑

Github分支介绍:  master 属于稳定的开发版  develop 属于不稳定的,开发版个人推荐:下载最新的 release 版本即可,当然,我知道你们都会点 star,点个 watch 关注新版本不迷路

Tutorial 中,Execute 中的调试输出都被屏蔽了,因为唤醒频率很快,导致控制台疯狂输出,默认间隔是 1ms
NFPluginLoader -> main
  1.     while (!bExitApp)
  2.     {
  3.         while (true)
  4.         {
  5.             std::this_thread::sleep_for(std::chrono::milliseconds(1));

  6.             if (bExitApp)
  7.             {
  8.                 break;
  9.             }

  10. #if NF_PLATFORM == NF_PLATFORM_WIN
  11.             __try
  12.             {
  13. #endif
  14.                                 NFCPluginManager::GetSingletonPtr()->Execute();
  15. #if NF_PLATFORM == NF_PLATFORM_WIN
  16.             }
  17.             __except (ApplicationCrashHandler(GetExceptionInformation()))
  18.             {
  19.             }
  20. #endif
  21.         }
  22.     }
复制代码


框架中 Actor 之间发送的消息类型统一都是 string,通过 protobuf进行打包解包操作
摘录了NF框架中部分代码,打包 + 解包
  1. bool SMysqlBaseParam::PackParam(std::string& strData)
  2. {
  3.     try
  4.     {
  5.         NFMsg::PackMysqlParam xMsg;

  6.         xMsg.set_strrecordname(strRecordName);
  7.         xMsg.set_strkey(strKey);
  8.         xMsg.set_bexit(bExit);
  9.         xMsg.set_nreqid(nReqID);
  10.         xMsg.set_nret(nRet);
  11.         xMsg.set_etype(eType);

  12.         for (int i = 0; i < fieldVec.size(); i++)
  13.         {
  14.             const std::string& strFiled = fieldVec[i];
  15.             xMsg.add_fieldveclist(strFiled);
  16.         }

  17.         for (int i = 0; i < valueVec.size(); i++)
  18.         {
  19.             const std::string& strValue = valueVec[i];
  20.             xMsg.add_valueveclist(strValue);
  21.         }

  22.         return xMsg.SerializeToString(&strData);
  23.     }
  24.     catch (...)
  25.     {
  26.         return false;
  27.     }

  28.     return true;
  29. }


  30. bool SMysqlBaseParam::UnPackParam(const std::string& strData)
  31. {
  32.     try
  33.     {
  34.         NFMsg::PackMysqlParam xMsg;
  35.         if (!xMsg.ParseFromString(strData))
  36.         {
  37.             return false;
  38.         }

  39.         strRecordName            = xMsg.strrecordname();
  40.         strKey                   = xMsg.strkey();
  41.         bExit                    = xMsg.bexit();
  42.         nReqID                   = xMsg.nreqid();
  43.         nRet                     = xMsg.nret();
  44.         eType                    = (NFIAsyMysqlModule::ACOTERMYSQLEVENT)xMsg.etype();

  45.         for (int i = 0; i < xMsg.fieldveclist_size(); i++)
  46.         {
  47.             const std::string& strField = xMsg.fieldveclist(i);
  48.             fieldVec.push_back(strField);
  49.         }

  50.         for (int i = 0; i < xMsg.valueveclist_size(); i++)
  51.         {
  52.             const std::string& strValue = xMsg.valueveclist(i);
  53.             valueVec.push_back(strValue);
  54.         }

  55.     }
  56.     catch (...)
  57.     {
  58.         return false;
  59.     }

  60.     return true;
  61. }
复制代码

windows 系统里中,运行插件,正常退出逻辑是在窗口中输入 exit (自动退出的逻辑还没搞明白,后续过来补上)

vs中新建插件,需要配置很多参数,才能方便的配合代码调试,省事的做法:直接复制 Tutorial1,然后选中所有文件,文本替换 Tutorial1 即可
最坏的结果就是,Tutorial1 配置有坑,导致全部掉坑里面,暂时没发现问题,正常开发中





回复

使用道具 举报

30

主题

112

帖子

668

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
668
发表于 2017-4-14 04:56:25 | 显示全部楼层
牛! 我加新插件一般去copy midware那一堆,比如copy friend plugin,然后全部文本替换就好.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | Register Now

本版积分规则

 

GMT+8, 2018-12-12 19:59 , Processed in 0.099989 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表