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

3d Game Walkman

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

這段時間加入了網絡序列化的功能

前面的文章也提到了,看了一些服務器的大師級的代碼,SmartStruct和自定義序列化的方式都有,如果單單只用C結構體作為語意數據載體固然可以,但很多網友也提出了很多質疑,最大的缺陷就是靈活性欠佳,誠然如此。

這段時間沉下了心,好好寫了一些類主要有:

ObjectStream
StreamBuffer
SerializeMap
PacketStruct
...

等等,有了前人的經驗,似乎也算比較順利,一個個從基本的數字,
到數組,到char[] (很多資料也稱之為:raw 二進制序列)
再到STL 的一系列容器的序列化工作都實現了

其中大量使用了模版類的泛型設計,不必要求一個可序列化的類必須繼承某某基類,只需要具備以下:

 SerializeTag ComputeTag();
 bool Read(ObjectStream& stream);
 bool Write(ObjectStream& stream);
 DWORD GetLength(ObjectStream& stream);
 bool operator==(const PacketHeader &other) const;

五個方法就可以了,如果隨意給你一個事先定義好的類,可以實現序列化嗎?當然可以,只需要寫出該類的
Wrapped Proxy,再添加這5個方法,就能通過 ObjectStream 和 StreamBuffer 實現該類的序列化了

這些是寫完成了,回頭看看自己已經寫好的網絡邏輯模塊,犯愁了。
唉……,加入序列化,相當于高層次的通訊協議全都變了,包結構要改,所有的業務邏輯通訊代碼隨之要改。

之前的工作…… 又要寫大量的重構代碼了。

重構真是件痛苦的事情。
最壞的打算把之前的一些邏輯東西按現有思路重寫一遍嘛,二次加工也許能應禍得福,把破舊看不過眼的地方重整理的更漂亮,好比重新裝修升級一樣

現在,只能告訴自己一件事,沉下心,沉注氣。

posted on 2008-03-01 17:15 李侃 閱讀(1804) 評論(4)  編輯 收藏 引用 所屬分類: 網絡模塊

評論

# re: 這段時間加入了網絡序列化的功能  回復  更多評論   

不知道具體實現,應該只要基本的序列化機制即可,模板都可以不用,實現是不是復雜了點?
2008-03-01 22:42 | giscn

# re: 這段時間加入了網絡序列化的功能  回復  更多評論   

具體實現就不發上來了,給你看一段測試的代碼,模版的好處太多了

template <typename T>
void TestSerialize(T& val, bool enableTag)
{
ObjectStream s(enableTag);
StreamBuffer buf;
DWORD size = s.GetLength(val);
buf.realloc(size);

// write
assert( s.BeginWriting(&buf) );
assert( s.Write(val) );
assert( s.EndWriting() );

DumpBuffer(buf);

// read
T val_read;
assert( s.BeginReading(&buf) );
assert( s.Read(val_read) );
assert( s.EndReading() );

// nothing left to read
assert( buf.GetRestLength() == 0 );

// we read what we wrote
assert( val == val_read );
}

class Foo:public SerializeObject
{
public:
Foo(){
ZeroMemory(m_chr, 20);}

void Init(const std::string& s, const std::vector<DWORD>& v, DWORD d, const char * chr)
{
m_s = s;
m_v = v;
m_d = d;
strcpy(m_chr, chr);
}

bool operator==(const SerializeObject &other) const
{

return m_d == ((Foo&)other).m_d &&
m_v == ((Foo&)other).m_v &&
m_s == ((Foo&)other).m_s &&
strcmp(m_chr, ((Foo&)other).m_chr)==0;
}

SerializeTag ComputeTag()
{
return eTAG_USERCLASS;
}


bool Write(ObjectStream& stream)
{
return stream.Write(m_d) &&
stream.Write(m_s) &&
stream.Write(m_v) &&
stream.WriteRaw(m_chr, (DWORD) strlen(m_chr));
}

bool Read(ObjectStream& stream)
{
return stream.Read(m_d) &&
stream.Read(m_s) &&
stream.Read(m_v) &&
stream.ReadRaw((void *)m_chr);
}

DWORD GetLength(ObjectStream& stream)
{
return stream.GetLength(m_d) +
stream.GetLength(m_s) +
stream.GetLength(m_v) +
stream.GetRawLength((DWORD) strlen(m_chr));
}

public:
DWORD m_d;
std::string m_s;
std::vector<DWORD> m_v;
char m_chr[100];
};

void TestUserDefclass()
{
printf("test UserDefclass:\r\n");
printf("====================================\r\n");

printf("test User Def Class Foo with tags and no tags \r\n");
printf("---------------------------------\r\n");
Foo foo;
std::vector<DWORD> v;
v.push_back(1);
v.push_back(2);
char strs[20];
strcpy(strs, "jack");

foo.Init("hello", v, 3, strs);

TestSerialize(foo, true);
TestSerialize(foo, false);
}

void testSTL
{

printf("test std::set with tags and no tags \r\n");
printf("---------------------------------\r\n");
std::set<DWORD> st;
st.insert(9);
st.insert(11);
st.insert(10);
TestSerialize(st, true);
TestSerialize(st, false);
printf("\r\n");
}

ObjectStream 可以讀和寫任何類型的對象到StreamBuffer(StreamBuffer里面有個char[],二進制序列存這里)中去,這都歸功于模版啊,
2008-03-02 13:21 | 李侃

# re: 這段時間加入了網絡序列化的功能  回復  更多評論   

自己寫的還是贊一個.

不過我喜歡用BOOST的序列化.

http://www.boost.org/libs/serialization/doc/index.html

2008-03-03 08:54 | 橙子

# re: 這段時間加入了網絡序列化的功能  回復  更多評論   

恩,好像大家都這么說,有時間的話,我也去看看Boost的序列化的源碼,看看有什么更好的可取之處
2008-03-06 16:47 | 李侃
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品视频在线观看| 久热精品视频在线免费观看| 国产精品午夜国产小视频| 欧美日韩精品免费观看视频| 欧美区日韩区| 欧美三日本三级少妇三2023| 欧美图区在线视频| 国产精品亚洲综合天堂夜夜| 国产亚洲精品v| 精品88久久久久88久久久| 久久午夜激情| 久久久久9999亚洲精品| 久久一区二区三区国产精品| 免费在线观看日韩欧美| 欧美精品一区二区三区视频| 国产精品成人播放| 国产日本欧美视频| 在线精品视频在线观看高清| 亚洲日本成人| 欧美一区二区免费| 欧美激情欧美激情在线五月| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美在线免费一级片| 欧美成人资源网| 国产麻豆综合| 日韩一二三在线视频播| 久久久999精品视频| 亚洲国产成人不卡| 亚洲综合色婷婷| 美女国产一区| 国产欧美精品一区二区色综合| 在线免费高清一区二区三区| 亚洲一区尤物| 免费观看成人鲁鲁鲁鲁鲁视频| 一区二区高清| 欧美精品1区| 在线看国产一区| 久久国产日本精品| 亚洲天堂av电影| 欧美福利在线| 亚洲福利视频在线| 久久久青草青青国产亚洲免观| 亚洲国产成人久久| 久久精品免费看| 国产老女人精品毛片久久| 一本色道久久综合狠狠躁篇怎么玩| 久久躁狠狠躁夜夜爽| 亚洲欧美日韩精品久久奇米色影视| 欧美二区不卡| 亚洲福利久久| 快射av在线播放一区| 欧美一级精品大片| 国产日韩欧美精品在线| 欧美精品在线极品| 91久久精品日日躁夜夜躁欧美| 久久久综合网| 先锋影院在线亚洲| 国产亚洲成年网址在线观看| 亚洲欧美日韩综合国产aⅴ| 亚洲精品国产精品乱码不99 | 欧美电影免费网站| 久久精品国产免费观看| 国产亚洲午夜高清国产拍精品| 亚洲欧美伊人| 小黄鸭视频精品导航| 国产亚洲欧美日韩美女| 久久精品中文字幕一区| 欧美黄在线观看| 欧美午夜寂寞影院| 亚洲一级黄色av| 一区二区av在线| 国产精品国产三级国产普通话蜜臀| 亚洲图片在线| 亚洲欧美成人一区二区在线电影| 国产精品亚洲视频| 久久综合婷婷| 欧美大片91| 亚洲一区二区黄色| 亚洲欧美日韩精品在线| 精品成人一区二区三区| 欧美黄色免费网站| 欧美日韩一区二区在线视频 | 中文在线一区| 午夜国产精品影院在线观看| 精品1区2区| 亚洲毛片网站| 国产在线乱码一区二区三区| 欧美成人久久| 国产精品日韩在线观看| 久久久噜噜噜久久中文字幕色伊伊| 美女啪啪无遮挡免费久久网站| 一本色道精品久久一区二区三区| 亚洲一区二区高清| 亚洲国产精品一区二区www在线| 亚洲精品国产无天堂网2021| 国产精品网站视频| 亚洲成人在线网站| 国产精品一区二区三区四区五区| 麻豆精品一区二区综合av| 欧美另类在线播放| 久久久久高清| 欧美日韩在线不卡| 久久一二三四| 国产精品裸体一区二区三区| 美女视频黄免费的久久| 国产精品s色| 国产亚洲美州欧州综合国| 91久久精品久久国产性色也91| 国产精品免费视频观看| 亚洲电影专区| 国产一区视频观看| 亚洲午夜成aⅴ人片| 日韩午夜视频在线观看| 久久成人免费视频| 欧美一区二区三区免费看| 欧美精品在线观看一区二区| 美女网站在线免费欧美精品| 国产精品一区二区黑丝| 一区二区三区高清| 一本色道久久综合狠狠躁篇的优点 | 老司机一区二区| 国产欧美一区二区视频| 夜夜爽av福利精品导航| 亚洲精品永久免费精品| 狠狠入ady亚洲精品| 美腿丝袜亚洲色图| 亚洲一区二区高清视频| 久久久91精品国产一区二区三区 | 影音欧美亚洲| 欧美精品自拍| 亚洲综合丁香| 这里是久久伊人| 亚洲精品婷婷| 亚洲激情专区| 亚洲欧美日本国产有色| 夜夜精品视频| 亚洲高清一二三区| 在线免费观看成人网| 久久成人一区| 久久人91精品久久久久久不卡| 国产日本欧美一区二区| 午夜精品一区二区三区在线视| 亚洲综合国产激情另类一区| 欧美日韩另类字幕中文| 亚洲精品国精品久久99热| 一区二区三区欧美激情| 欧美日韩国产综合视频在线观看| 亚洲精品欧美精品| 亚洲图片欧洲图片日韩av| 欧美体内she精视频| 亚洲午夜电影在线观看| 欧美综合77777色婷婷| 狠狠爱成人网| 美女91精品| 亚洲精品一二三| 香蕉免费一区二区三区在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美主播一区二区三区| 免费观看30秒视频久久| 日韩午夜在线电影| 国产精品一二三四| 久久黄色小说| 亚洲乱码久久| 久久久www| 亚洲精品一区二区三| 国产精品乱人伦中文| 久久婷婷影院| 在线综合视频| 美女网站在线免费欧美精品| 亚洲另类视频| 国产欧美日韩另类视频免费观看| 久久久精品久久久久| 亚洲电影在线播放| 欧美亚洲一级| 亚洲日韩欧美一区二区在线| 国产精品成人免费精品自在线观看| 亚洲欧美日韩国产综合精品二区 | 亚洲高清激情| 欧美日韩精品二区| 久久久99爱| 一区二区三区黄色| 亚洲伦理在线观看| 亚洲免费播放| 国产精品久久国产三级国电话系列| 亚洲欧美激情一区| 亚洲黄色av| 久久久久综合一区二区三区| 亚洲人成在线播放网站岛国| 国产日韩欧美高清| 欧美日韩一区二区高清| 老司机一区二区| 欧美一区影院| 日韩亚洲国产精品| 欧美激情va永久在线播放| 欧美综合国产精品久久丁香| 亚洲一区在线观看免费观看电影高清| 精品91久久久久| 国产一级久久| 国产伦一区二区三区色一情| 欧美日韩国产大片|