青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

3d Game Walkman

3d圖形渲染,網絡引擎 — tonykee's Blog
隨筆 - 45, 文章 - 0, 評論 - 309, 引用 - 0
數據加載中……

今天做了一個Struct結構,作為游戲里面的包容器來使用,可以一次發送多個邏輯結構信息了,爽啊!!!

游戲里面的數據,最重要的就是如何組織,常見的包結構就是type+len+data這樣的結構 

//所有包的基類型
struct BasePack
 {
  unsigned short type;  //類型
  unsigned short len;   //長度
  BasePack();
  unsigned short size();
 };


 //////////////////////////////////////////////////////////////////////////
 //比如這個是登錄包結構
 struct LoginPack :public BasePack
 {
  char username[15];
  char password[10];
  LoginPack();
  unsigned short size();
 };

//..還有很多類型的包結構,自己去擴展

//下面這個包結構就很特別了:
這個struct 結構能保存變長的子結構體,也就是結構體的容器,如果一次要發送大量查詢的數據,可以用這個容器來裝載。結構大致如下:
//////////////////////////////////////////////////////////////////////////
 //集合包,這是個很特殊的包,里面的數據是變長的(buffer 將作為子包的首指針)
 //當然也有個上限,只不過和StringPack一樣,每次發送的數據量不固定,并不一定是包體的長度,
 //使用這個包的注意事項:1.如果用tcp,總長不要超過4096, 如果用udp總長不要超過1024(安全指數)
 //                      2.一般一個包不會共享給多個線程來處理,而且都是臨時拼發,并未考慮線程安全
 struct CollectionPack:public BasePack
 {
  unsigned short mSubPackCount;   //子包的數量

  char buffer[4096];           //最大限度的包長度,做緩沖

  CollectionPack();

  //清除CollectionPack里面的內容
  void clear();

  //得到子包的數量
  unsigned short getSubpackCount();

  //添加子包,添加是否成功,集合包的大小,默認不超過MTU的大小,當然如果是TCP傳輸,則沒有這個限制,最大可以是4096
  bool   append(BasePack &pack,  unsigned short  maxsize=1500);

  //本集合包的總長度
  unsigned short size();

  //重載數組運算符,這樣就可以數組迭代的方式訪問子包了,不過用索引迭代沒有next迭代的效率高
  BasePack *operator[](int idx);

  //p迭代的指針,返回當前取出來的包的指針使用方法如下:
  //   BasePack *p = 0;
  //while(collection.next(&p))
  //{
  //  p就是當前你找到的包了
  //}
  BasePack * next(BasePack ** p);
 };


CollectionPack::CollectionPack()
{
 memset(buffer,0, 4096);
 type = COLLECTION_PACK;
 mSubPackCount = 0;
}


//清除CollectionPack里面的內容
void CollectionPack::clear()
{
 mSubPackCount = 0;
 memset(buffer,0, 4096);
}

//得到子包的數量
unsigned short CollectionPack::getSubpackCount()
{
 return mSubPackCount;
}

 

//添加子包,添加是否成功
bool   CollectionPack::append(BasePack &pack, unsigned short maxsize)
{
 unsigned int currentlen = size(); //當前整個包的長度
 unsigned int psize = pack.size(); //即將要加入的包的長度

 if(psize + currentlen > maxsize || psize + currentlen > SESSION_BUFFER_LONGTH)
 {
  return false; //不能夠再裝了
 }

 int len  = size() - 6;

 memcpy(buffer + len, &pack,  pack.size());

 //StringPack *p = (StringPack *) (buffer + len);
 mSubPackCount ++;
 return true;
}


//本集合包的總長度
unsigned short CollectionPack::size()
{
 len = 0;
 for(unsigned short i = 0; i < mSubPackCount; i ++)
 {
  BasePack * p = (BasePack *) (buffer + len);
  len += p->size();
 }
 len += 6;     //(type len  SubPackNum 共6個字節)
 return len;
}

 

//重載數組運算符,這樣就可以數組迭代的方式訪問子包了,不過用索引迭代沒有next迭代的效率高
BasePack * CollectionPack::operator[](int idx)
{
 if(idx < 0 || idx >=mSubPackCount)
 {
  return 0; //下標越界
 }

 int ln = 0;
 for(unsigned short i = 0; i < mSubPackCount; i ++)
 {
  BasePack * p = (BasePack *) (buffer + ln);

  if(idx == i)
   return p;
  else
   ln += p->size();
 }

 return 0;
}

 


//p迭代的指針,返回當前取出來的包的指針使用方法如下:
//   BasePack *p = 0;
//while(collection.next(&p))
//{
//  p就是當前你找到的包了
//}
BasePack *  CollectionPack::next(BasePack ** p)
{
 char *cur = 0;

 if((*p)==0)
  cur = buffer;
 else
  cur = (char *)(*p);

 //指針后移,定位到下一個包的位置
 (*p)=(BasePack *)(cur + ((BasePack *)cur)->size());

 if((*p)->type == 0)
  return 0; //沒有類型為0類型的包,如果為0,顯然是到末尾了
 else
  return (*p);
}


有了以上這個容器,要把一些小包組合起來一起發送就非常方便了,但是組合的時候,還是要考慮不能超出上限范圍的

不過在真實的游戲服務器里面,包不一定是采用結構體的方式來發送的,有的是把對象串行化成為字節流的方式來發送。
我覺得這樣比較麻煩,要encoding decoding,效率調試都不方便,直接法結構體,高效,簡單,可就是不太安全。

posted on 2008-01-24 00:21 李侃 閱讀(2074) 評論(2)  編輯 收藏 引用 所屬分類: 網絡模塊

評論

# re: 今天做了一個Struct結構,作為游戲里面的包容器來使用,可以一次發送多個邏輯結構信息了,爽啊!!!  回復  更多評論   

直接序列化數據嘛,干嘛那么麻煩
2008-01-24 08:50 | teli

# re: 今天做了一個Struct結構,作為游戲里面的包容器來使用,可以一次發送多個邏輯結構信息了,爽啊!!!  回復  更多評論   

提個建議,不要用摘要方式發文吧?每看一篇文章都要點擊鏈接進來,不方便。
2008-01-25 09:27 | Fox
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            黄色成人在线网站| 一区二区三区不卡视频在线观看| 香蕉久久夜色精品国产| 欧美成人午夜激情| 性做久久久久久免费观看欧美| 欧美剧在线免费观看网站| 亚洲国产专区校园欧美| 久久精品国产久精国产思思| 亚洲天堂成人在线视频| 欧美日韩国产免费| 99在线热播精品免费99热| 免费中文字幕日韩欧美| 久久乐国产精品| 精品51国产黑色丝袜高跟鞋| 久久精品视频免费观看| 久久精品亚洲一区二区| 狠狠久久婷婷| 欧美多人爱爱视频网站| 久久人人97超碰国产公开结果| 国产亚洲午夜| 狂野欧美激情性xxxx欧美| 久久久久久久综合| 亚洲国产日韩欧美在线动漫 | 夜夜嗨网站十八久久| 欧美激情在线观看| 亚洲伦理中文字幕| 亚洲精品久久久久中文字幕欢迎你| 久久综合99re88久久爱| 一区在线观看视频| 欧美aa在线视频| 牛牛影视久久网| 亚洲视频1区| 亚洲欧美文学| 亚洲国产黄色| 一区二区欧美在线| 国产亚洲成av人在线观看导航| 另类av一区二区| 久久久亚洲欧洲日产国码αv | 在线国产亚洲欧美| 亚洲国产日韩一区| 欧美性大战久久久久久久蜜臀| 性欧美精品高清| 久久久久久久久久久久久女国产乱 | 在线观看日韩av电影| 亚洲成色最大综合在线| 欧美激情一区在线| 午夜精品免费在线| 久久久xxx| 亚洲午夜av电影| 久久九九全国免费精品观看| 一区二区三区四区在线| 亚洲欧美在线观看| 亚洲日本va午夜在线电影| 一区二区三区四区五区精品视频| 国产一级一区二区| 亚洲精品护士| 国产一区二区主播在线| 亚洲国产导航| 国产在线一区二区三区四区| 亚洲精品一区二区三区在线观看| 国产欧美日韩综合一区在线观看| 欧美91视频| 国产一区二区三区的电影 | 99精品国产在热久久| 午夜精品福利一区二区三区av | 久久激情综合| 欧美精品三级日韩久久| 久久久久综合网| 欧美婷婷在线| 欧美承认网站| 国语精品中文字幕| 亚洲自拍偷拍网址| 亚洲国产天堂久久综合网| 性18欧美另类| 亚洲欧美国产精品专区久久| 欧美国产一区二区| 久久综合五月| 国模叶桐国产精品一区| 亚洲一区影院| 亚洲欧美另类在线观看| 欧美精品一区二区三| 欧美国产视频日韩| 久久精品99国产精品日本| 一二三四社区欧美黄| 欧美成人精品在线| 欧美黄色aa电影| 亚洲黄色精品| 美国十次成人| 欧美国产精品一区| 亚洲电影毛片| 欧美福利在线| 亚洲精品一区二区在线| 一本色道久久88亚洲综合88| 欧美精品在线极品| 亚洲电影自拍| 艳女tv在线观看国产一区| 欧美日韩第一区日日骚| 99re热这里只有精品视频| 欧美精品v日韩精品v韩国精品v | 国产一区自拍视频| 性做久久久久久免费观看欧美| 欧美在线亚洲一区| 国产欧美日韩精品一区| 午夜精品久久| 久久中文字幕一区二区三区| 尤妮丝一区二区裸体视频| 久久中文字幕导航| 亚洲精品美女91| 亚洲香蕉伊综合在人在线视看| 欧美午夜不卡在线观看免费| 亚洲一区二区三区在线看| 欧美一区网站| 在线观看国产成人av片| 欧美成人免费网| 亚洲最新中文字幕| 性做久久久久久久免费看| 国产无遮挡一区二区三区毛片日本| 欧美在线视频免费| 欧美激情精品久久久久| 在线亚洲精品| 韩日视频一区| 欧美黄色大片网站| 亚洲自拍高清| 亚洲国产精品日韩| 亚洲综合激情| 影视先锋久久| 欧美日韩综合久久| 欧美一区2区三区4区公司二百| 久久亚洲春色中文字幕| 亚洲日本欧美在线| 国产精品一级久久久| 开元免费观看欧美电视剧网站| 亚洲美女一区| 裸体一区二区三区| 国产精品99久久99久久久二8 | 欧美激情精品久久久久久变态| 中文日韩欧美| 欧美成人综合网站| 欧美一二三视频| 亚洲高清毛片| 国产精品免费观看在线| 美国十次了思思久久精品导航| 一区二区三区国产在线观看| 久热精品在线视频| 欧美日韩国产bt| 久久久久国产精品人| 亚洲激情啪啪| 久久伊伊香蕉| 亚欧成人精品| 亚洲视频高清| 亚洲久色影视| 在线精品一区二区| 国产欧美一二三区| 欧美男人的天堂| 卡通动漫国产精品| 久久国产一区二区| 亚洲小视频在线观看| 亚洲国产精品久久91精品| 久久精品久久综合| 亚洲欧美国产一区二区三区| 亚洲三级电影全部在线观看高清| 国内久久视频| 国产一区二区剧情av在线| 国产精品wwwwww| 亚洲欧美在线一区二区| 亚洲激情二区| 国产欧美一级| 国产精品男人爽免费视频1| 欧美大片免费久久精品三p | 国内精品久久久久影院色| 国产精品高潮久久| 欧美视频免费在线观看| 欧美精品久久久久久| 免费日韩精品中文字幕视频在线| 香蕉成人啪国产精品视频综合网| 一区二区三区视频在线| 日韩亚洲国产精品| 亚洲巨乳在线| 日韩视频在线观看免费| 亚洲黄色性网站| 亚洲欧洲在线一区| 亚洲精品免费一区二区三区| 亚洲国产精品va在线看黑人动漫| 久久综合久久久久88| 麻豆成人综合网| 欧美国产日韩在线| 亚洲欧洲中文日韩久久av乱码| 亚洲人体影院| 午夜国产精品影院在线观看 | 亚洲国产天堂网精品网站| 久色成人在线| 老司机精品福利视频| 免费不卡亚洲欧美| 亚洲电影成人| 日韩午夜激情电影| 亚洲一区二区三区影院| 欧美一级网站| 麻豆精品传媒视频| 欧美日韩国产一区二区| 国产精品久久久久影院色老大 |