Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98965
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2014-07-16 15:27:56

前言: 想通过模块化,一步步实现一个完整的游戏服务端, 所以除了模块以外的功能都不关心,类似Kiss原则,反倒比以前一锅大杂烩的更好。
目标: 一个轻量级的跨平台网络库, ace, boost太庞大, 所以自己实现了个。
实现: 目前支持select, iocp, 以后支持epoll.
接口:

点击(此处)折叠或打开

  1. class YYNet
  2. {
  3. public:
  4.     YYNet(OnConCallback onCon, OnDisConCallback onDis, OnReadCallback onRead);
  5.     ~YYNet();

  6.     //连接
  7.     bool connect(const char* ip, int port, sint64& connID);

  8.     //监听
  9.     void listen(const char* ip, int port);

  10.     //发送消息
  11.     void send(sint64 connID, const char* buf, int len);

  12.     //关闭连接
  13.     void close(sint64 connID);

  14.     //循环监听网络事件
  15.     void eventLoop();
  16. private:
  17.     YYNetImpl* m_impl;
  18. };

测试用例:

点击(此处)折叠或打开

  1. int main()
  2. {

  3.     NetEvent net_event;

  4.     //网络事件
  5.     YYNet net(
  6.         MakeDelegate(&net_event, &NetEvent::onCon),
  7.         MakeDelegate(&net_event, &NetEvent::onDisCon),
  8.         MakeDelegate(&net_event, &NetEvent::onRead));

  9.     //连接服务器
  10.     uint64 connID=0;
  11.     net.listen("127.0.0.1", 5001);

  12.     printf("listen on 127.0.0.1:5001\n");

  13.     while(true)
  14.     {
  15.         try{
  16.             net.eventLoop();
  17.         }catch(Exception& err)
  18.         {
  19.             printf(err.what());
  20.         }
  21.     }

  22.     return 0;
  23. }

除了网络库, 服务端通常会用到很多系统api, 为了方便以后跨平台, 封装了一些常用的api, 如时间, 文件等。

网络库代码:yy_net_only.zip
测试代码:test.zip
网络+常用api的代码:yy.zip


阅读(608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~