forked from reckfullol/llbc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
604 lines (600 loc) · 44.8 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
# llbc library update log file.
# Longwei Lai<[email protected]>
######################################################################################
# Version: 1.1.0
# 2022/8~
#
# Version: 1.0.9
# 2020/9~2022/8
# 1)【llbc core】Facade->Component命名变更
# 2)【llbc core】优化LLBC_Directory::Join(),使用变长模板参数简化原有实现(感谢caochunxi)
# 3)【llbc core】标准化Variant排序实现, 确保行为跟python一致
# 4)【llbc core】标准化Variant operator bool()/AsBool()操作,参考python,对于number: 0为false,对于string/seq/dict: 代为false
# 5)【testsuite】testsuite运行时支持argc/argv输入(为之前testsuite改造时导致的机制缺失, 现已补上)
# 6)【pyllbc】优化python层packet构造性能, 提供reuse机制以确保packet创建的高效(PYLLBC_CFG_PACKET_REUSE选项), 针对packet创建参数同样进行优化, 优化后的收包性能提升100%
# 7)【pyllbc】针对python层的packet对象的不常访问的属性:local_ip/local_port/peer_ip/peer_port/extdata1/extdata2/extdata3, 进行惰式访问优化, 以最大限度提升性能
# 8)【llbc core】提供新式Delegate实现, 在兼容std::funtion的同时, 对c function/c++ method提供更好的性能, 同时废除旧式Delegate实现, 所有代码配套调整
# 9)【llbc core】标准化LLBC_TimeSpan构建接口: FromSS/FromMMSS/FromHHMMSS/...
# 10)【llbc core】Timer接口简化, 只保留LLBC_TimeSpan参数接口, 超时数据类型从uint64调整到sint64, 以跟time api保持一致
# 11)【pyllbc】python Service.fire_event接口设计优化, 去除复杂的addiHandler/customHandler, 统一清晰化成enqueueHandler/dequeueHandler, 以正确处理python event object的ref inc/dec
# 12)【llbc all】去除NULL使用, 调整成nullptr
# 13)【llbc core】LLBC_BasicString::format/append_format性能改进
# 14)【llbc core】日志记录器时间访问优化(原10w+/s优化成1000/s)
# 15)【llbc all】其它细节优化, bug fix
# 16)【llbc core】修正epoll中数据访问问题
# 17)【premake】对wrap实行清晰分组
# 18)【llbc core】为了更好的其他库结合, 针对win32平台特有的字符串数据类型在非win32平台的定义, llbc提供可选项让使用者项目中有其他项目有定义的情况下取消定义, 宏: LLBC_CFG_CORE_UTILS_DEF_WIN32_STYLED_STR_DATATYPES
# 19)【llbc core】优化Log输出性能, 做到Log输出时的0 malloc/free以及只有一次的log message format操作, 对接口及设计进行优化
# 20)【llbc core】事件系统支持链式事件调用, 以做到使用最简洁,同时事件对象对象池化, 做到最高效性能
# 21)【llbc core】对象池反射识别优化, 使用更简洁方式反射对象池方法列表,同时对象池对象基类命名简化:LLBC_PoolObjectReflectionBase->LLBC_PoolObject
# 22)【llbc core】对象池可重用方法识别增加reuse()/Reuse()支持
# 23)【llbc core】LLBC_BasicCString增加std::ostream &operator <<(std::ostream &operator <<, const LLBC_BasicCString &)方法支持
# 24)【llbc core】相关多余LLBC_EXTERN宏使用去除
# 25)【llbc core】对象池反射方法简化, 去除IsPoolObject()/GiveBackToPool()方法要求, 以让对象池使用者以更轻的负担编写反射支持的类实现
# 26)【llbc core】简化Hash包装, 提供LLBC_Hash<algo>(bytes, size) 及 LLBC_Hash()方法支持
# 27)【llbc core】对象池结合推进中项目进行优化:
# - 便利性接口提供
# - 泛化GC对象、非GC对象的接口访问及使用, 标准化LLBC_ObjectGuard, 能统一管理GC/非GC对象, 支持copy construct/copy assignment
# - 对象池反射改进及简化: 简化反射支持接口约束, 增加c++11的泛型反射支持, LLBC_Recycle优化、完善
# - 对象重用代码优化
# 28)【llbc core】Event模块整体代码简化及命名优化
# 29)【llbc core】RDTSC/LLBC_CPUTime完整重构, 标准化cpu时间获取支持
# 30)【llbc core】框架代码中的static const number变量定义调整成constexpr
# 31)【pyllbc】修复一处dist操作内存泄漏
# 32)【llbc all】完整简化Makefile, 同时修复部分projs有并发编译时的依赖报错问题
# 33)【llbc all】部分旧风格代码的整理(2015年前)
# 34)【llbc core】完整优化LLBC_Stream内部的resize实现, 确保在内存分配时有一个可控的分配策略
# 35)【llbc core】修正部分宏在未引入namespace时的报错问题(集中行log module)
# 36)【llbc core】完整简化llbc对不是大部分模块都有使用的OS API/C lib/C++ lib头文件引用, 以降低编译耗时及减少不必要的耦合, 同时也增强可移植性
# 37)【llbc core】Timer timeout handler/cancel handler及Service相关Subscribe方法简化, 支持(Obj *, void (Obj *)(xxx))接口
# 38)【llbc core】LLBC_Time/LLBC_TimeSpan接口规整及简化
# 39)【llcb core】LLBC_Timer的TimerScheduler获取隋式延迟到Schedule调用处, 以确保跨线程创建的Timer可被实际执行线程Schedule
# 40)【llbc core】优化LLBC_Packet payload相关接口访问
# 41)【llbc all】处理新g++编译器编译问题
# 42)【llbc core】LLBC_Delegate性能优化, 增加operator == nullptr/operator != nullptr支持
# 43)【llbc core】LLBC_TimerData内存占用优化
# 44)【llbc core】LLBC_Variant性能优化,泛型变参支持
# 45)【llbc core】对象池代码规整,性能优化,部分常用类型在llbc框架内直接特化(感谢@bravepan)
# 46)【llbc all】兼容macos arm平台编译(感谢@reckzhang)
# 47)【llbc all】更新premake, 增加vs2022支持
# 48)【llbc core】LLBC_MessageQueue完整优化
# 49)【llbc core】LLBC_Service队列消息创建、处理完整优化
# 50)【llbc core】提升日志库性能(提升100%), 日志相关代码规整
# 50)【lullbc】提升日志库性能(提升100%), 日志相关代码规整(为龙腾《苏丹的复仇》项目进行)
# 51)【pyllbc】去除vs20xx后的HAS_ROUND宏报错
# 52)【llbc all】去除BeforeIncl.h/AfterIncl.h文件(统一通过premake完成)
# 53)【llbc core】去除LLBC_MemCpy/LLBC_MemSet多余宏, 使用c库memcpy/memmove/memset代替
# 54)【llbc core】规整LLBC_Stream中的Read/Write接口(去除ReadBuffer/WriteBuffer)
# 55)【llbc core】Service默认帧率调整到200, 暂时禁止service frame time特性
# 56)【llbc core】标准化RDTSC支持宏及相关代码, 包括LLBC_CPUTime
# 57)【lullbc】lua库升级到5.4.0_patch
# 58)【lullbc】标准化lullbc库,提供Chrono/Directory/CPUTime/Threading模块支持, 旧有支持执行命名及模块标准化
# 59)【lullbc】lulib_setting.lua简化, 去除use_setting标记
# 60)【pyllbc】pylib_setting.lua简化, 去除use_setting标记
# 61)【llbc all】其他诸多细节完善, 优化
# BugFix:
# - 【llbc core】修复若干string split bugs(感谢ericyonng)
# - 【llbc core】修复Time format一处格式化bug
# - 【llbc core】修复logger finalize一处死锁问题(by caochunxi)
# - 【llbc core】修复一处variant构造bug
# - 【llbc core】修复Random中RandInt()接口返回可能不在指定区间的Bug
# - 【llbc core】修复LLBC_MessageBlock一处memory overlapped检查bug(黏连属于合法但旧代码认为非法)
# - 【llbc core】修复LLBC_LogData中funcbeg/funclen未初始化导致的coredump问题
# - 【llbc core】LLBC_File设置BufMode的泄漏问题修复
# Version: 1.0.7-1.0.8
# 2019/06~2020/9
# 1)【llbc core】增加Protocol Stack控制支持,以安全异步的完成Service层跟ProtocolStack层的通信.
# 2)【llbc all】 规整所有for中的++/--使用,所有++/--统一调整为前置.
# 3)【llbc core】增加Protocol Stack Control机制,以满足业务层安全的对协议栈实施控制.
# 4)【llbc core】在非全栈模式下, Codec Protocol Stack支持每session一个.
# 5)【llbc core】优化ObjectPool代码, 包括Guard部分及核心部分, 使得ObjectPool更易使用.
# 6)【llbc core】Protocol Stack Control增加ctrl data delete delegate支持, 以让框架以自定义的方式销毁ctrlData.
# 7)【llbc core】调整objbase模块到core中, 去除编译控制.
# 8)【llbc core】objectpool增加ReferencablePoolObj支持, 以从对象池取得可引用对象(Retain/Release/AutoRelease).
# 9)【llbc core】优化LLBC_Dicrionary代码(主要为Iter相关).
# 10)【llbc core】优化object pool代码,去除不必要的运算, 性能再提升10%.
# 11)【llbc core】修复BasicString::split() bug, 并增加是否strip empty的支持.
# 12)【lullbc】Log中的file信息的前导符号去除(&,=), 以让其它交互工具更容易识别路径并进行交互操作.
# 13)【llbc core】Application中的ThisIApp()接口调整为ThisApp(), 统一命名.
# 14)【llbc core】修复Ini文件写入行结束符多出一个0x0d的问题.
# 15)【llbc core】objectpool增加memory align支持.
# 16)【llbc core】增加process识别, 当前支持x86/x86_64/arm/thumb/arm_64(详见PFConfig.h).
# 17)【llbc core】Service Full-Stack 选项从Config中去除,变成Service属性,即不同Service中的Full-Stack选项可不同,在Create时指定.
# 18)【llbc core】优化EventManager代码, LLBC_ListenerStub类型由String调整为uint64.
# 19)【llbc core】objectpool增加对象MarkPoolObject():void方法识别, 以在生成对象时标记此对象为池子内部对象, 以供业务及框架未来拓展用.
# 20)【llbc core】完善配置加载支持,IApplication/IFacade增加配置加载事件方法定义(ServiceMgr部分方法暂时线程不安全, 因项目需要先行提交).
# 21)【llbc core】更新mtrandom库.
# 22)【llbc core】增加LLBC_GetCurrentThreadId()支持, 对应LLBC_ThreadId数据类型增加.
# 23)【llbc core】优化Log ThreadId/ProcessId Token打印信息.
# 24)【llbc core】ObjectPool删除ObjectPoolInsts时, 增加删除顺序依赖支持(Ordered Delete).
# 25)【llbc core】Packet增加GetMutablePayload支持, 以在实际情境中更灵活进行发送数据的操纵.
# 26)【llbc core】ObjectPool增加自省(反射支持), 具体参见LLBC_PoolObjectReflection.
# 26)【llbc core】LLBC_Packet/LLBC_MessageBlock增加完整对象池对象自省方法实现.
# 27)【llbc core】LLBC_ObjectGuard增加DetachObj支持, 以使业务更灵活定制逻辑及做优化.
# 28)【llbc core】LLBC_ICoder增加对象池反射方法支持(在多重继承时要求重写).
# 29)【llbc core】LLBC_Packet中的Payload/Encoder/Decoder增加对象池对象识别.
# 30)【llbc core】增加LLBC_BasicCString支持, 以支持对const char *的逻辑支持(如对象池).
# 31)【llbc core】LLBC_IObjectPoolInst增加GetIObjPool()方法, 以便支持访问所属LLBC_IObjectPool需求.
# 32)【llbc core】增加LLBC_IObjectPoolInstFactory工厂类设计, 以支持在类型未知的情况下(LLBC_IObjectPool::GetIObjPoolInst())也能够动态创建对应类型的对象池实例, 最终结果依赖于使用者是否事先将未知类型对应的池工厂类有注入.
# 33)【llbc core】Service/Session/Socket/Protocol/Protocol Stack/Packet/MessageBlock完成支持对象池, 协议收发完成对象池化.
# 34)【llbc core】ObjectPoolInst去除<PoolInstLockType>模板参数, 调整为构造传入Lock, 以更易使用; 对象池对象反射方法要求增加一个LLBC_IObjectPoolInst *GetPoolInst()要求.
# 35)【llbc core】LLBC_ILock及其所有实现类增加bool IsDummyLock() const支持.
# 36)【llbc core】对象池设计优化, 去除不需要的模板参数, 增加运行时动态创建能力, 增加依赖删除网状关系图自动(运行自动拓扑生成).
# 37)【llbc core】增加对象池信息统计支持.
# 38)【llbc core】完整优化网络相关代码, 提供更多选项给应用层自定义, 同时性能提升10倍+(整体).
# 39)【llbc core】优化日志配置,提供root->其余logger配置继承及重写支持, 同时完善配置细节及代码优化.
# 40)【pyllbc】优化python layer协议包构建代码,优化后协议包处理性能提供100%.
# 41)【llbc core/pyllbc】提供Facade三方dll接入及注册支持, 特别对于python, 三方的c++facade只需要简单修改即可被python无缝接入使用.
# BugFix:
# -【llbc all】 解决在Service启动的后调用Listen/Connect/AsyncConn且指定的custom protocol时, custom protocol可能不被使用的bug.
# -【llbc core】修复对象池销毁时内存泄露问题.
# -【llbc core】修复Task::Wait/Cancel/...方法在Task所有线程并未完全创建就快速调用时,时引发的ThreadManager无法完全等待的bug.
# -【llbc core】修复LLBC_BasicString::split()在对空串进行split且strip_empty为True时还会返回包含空串的bug.
# -【llbc core】修复LLBC_Random构造函数在seed为0时未自动应用当前时间戳做seed的bug.
# -【llbc core】修复ini解析类未特化long/ulong的value获取导致的bug.
#
# Version: 1.0.6
# 1)【llbc core】增加ci支持(windows/linux/mac osx).
# 2)【llbc core】重构Variant,以优化性能、内存占用及支持Ptr.
# 3)【llbc core】Time/TimeSpan接口重整,内部移除double实现,以规范化使用时间相关对象.
# 4)【llbc core】增加dump file支持,增加实际获取stack backtrace支持.
# 5)【llbc core】日志支持json log,内部移除旧json库,使用Tencent的rapidjson.
# 6)【llbc core】增加object pool支持,以数量级提高性能及减少内存碎片.
# 7)【llbc core】其它各对象接口/细节完善.
#
# Version: 1.0.5
# 2018/03~2018/06
# 1)【llbc core】LLBC_BasicString增加startswith/endswith支持.
# 2)【llbc core】Random增加booljudge支持.
# 3)【llbc core】移除c++0x依赖及编译选项.
# 4)【llbc core】优化个别文件include.
#
# Version: 1.0.4
# 2018/03~2018/03
# 1)【llbc core】Facade增加Factory机制,所有Facade方法都在Service逻辑线程中调用.
# 2)【llbc core】Application增加Ini&Property&Json配置读取方案实现,以在实际应用中更便捷取得Application配置.
# 3)【llbc core】允许Facade::OnInitialize方法中调用Service的Subscribe/SubscribeEvent/SubscribeStatus/...相关注册订阅方法.
# 4)【llbc core】Packet增加GiveupEncoder/GiveupDecoder支持,以直接从Packet中取得Coder而不是copy.
# 5)【llbc core】Service移除所有模板Send方法支持.
# 6)【llbc core】Event机制扩展,Event增加参数支持,支持string参数/int参数.
# 7)【llbc core】增加LLBC_StartArgs支持,用于便利解析argc/argv启动参数, 同时Application增加GetStartArgs()支持, 直接可访问当前App启动参数.
# 8)【llbc core】LLBC_Ini增加reload支持.
# 9)【llbc core】Net<->Host bytes转换增加sint64/uint64转换支持.
# 10)【llbc core】整体优化网络及Log相关性能.
# 11) BugFix:
# -【llbc core】修复PacketProtocol空包接收错误.
# -【llbc core】修复Service中部分Multicast方法未返回的错误.
# -【llbc core】修复ServiceExternalDriveSvc test case编译错误.
#
# Version: 1.0.3
# 2018/02
# 1)【llbc core】修复Log中UnInitOutput()中level错误bug.
# 2)【llbc core】修复FULL_STACK选项编译错误.
# 3)【llbc core】Application接口规整、简化,更易于项目使用.
#
# Version: 1.0.2
# 2018/02/10
# 功能新增/改进/优化:
# 1)【llbc all】所有文件头增加MIT LICENSE.
# 2)【llbc core】引入RTTI支援, 同时对Service.RegisterXXX接口增加泛型支持,增加Service.GetFacade/GetFacades支持.
#
# 2018/02/08
# 功能新增/改进/优化:
1)【llbc core】归整所有Guard实现,统一抽取到Guard.h/Guard.cpp中.
2)【llbc core】增加自定义协议栈支持,允许开发者根据会话自定义自己的网络传输协议栈,最大限度提供灵活性,并保留Raw/Normal两种库内部默认实现.
3)【llbc core】去除原有的Packet Header Designer框架,原有的框架相对灵活,但也有局限,统一使用自定议协议栈方式替换旧机制.
4)【llbc core】重构Packet类,去除在操作headers时直接操作bytes实现.
5)【llbc core】增加sender service id/receiver service id的概念,为后面的集群支持作准备,当前已经支持service转发.
6)【llbc core】Packet Protocol协议层的创建优化,去除创建时的coders copy,直接reference,以让session create操作变得更快.
7)【llbc core】从易用性及优雅性考虑,优化Service Send/Multicast/Broadcast接口.
8)【llbc core】Service各订阅接口统一支持function delegate,为开发者提供另外一种选择.
9)【llbc core】增加FPS为LLBC_INFINTE时的支持,即不限制帧率.
9)【pyllbc】修复Service.send相关BUG.
10)【csllbc】修复Log相关BUG.
# 2018/01/31
# 功能新增/改进/优化:
# 1)【llbc core】对Delegate, Func增加Rtn typename, 以支持hold任意的class methods及functions, 同时对void Rtn进行偏特化,最终LLBC_Delegate机制可以完整hold任意class methods及functions.
# 2)【llbc core】对LLBC_Delegate增加destroyObjectWhenDestruct参数,以指示delegate在destruct的时候,是否要destroy cached的object.
# 3)【llbc core】针对CPURelax,增加windows x64支持(之前版本的支持是直接粗暴使用Sleep完成).
# 4)【llbc core】增加ALWAYS_INLINE macro,以更好的指示编译器进行内联.
# Bug Fix:
# 1)【llbc core】fix LLBC_FormatArg在vs2015及以后的版本中的编译报错, 为va_start要求fmt不能有()引起.
# 2)【llbc core】修复LLBC_Service在start后, 立刻删除, 有可能引起dead lock的BUG.
#
# 2017/12/10
# 1)【llbc core】增加LLBC_FuncDelegate实现, 以实现对function, class static function的保存, 做到使用LLBC_IDelegate hold住所有的callable的目的.
# eg: std::vector<LLBC_IDelegate1<int> *> delegs;
# delegs.push_back(new LLBC_Delegate1<Obj, int>(obj, &Obj::Foo)); // hold住Obj类的Foo函数
# delegs.push_back(new LLBC_FuncDelegate1<int>(FuncFoo)); // hold住FuncFoo函数
# for (size_t i = 0; i <delegs.size(); i++)
# delegs[i]->Invoke((int)i);
# 2017/11/30
# 1) 【llbc core】调整LLBC_Timer::OnTimeout/LLBC_Timer::OnCancel实现,不需要子类化LLBC_Timer,只需要在new LLBC_Timer的时候给定Timeout handler或者Timeout delegate即可.
# 对于上层的wraps库,同步进行兼容(wraps库没有影响).
#
# 2017/11/23
# 新增功能:
# 1) 【lullbc】增加Timer、TimerScheduler实现, 使用core lib中的LLBC_BaseTimer/LLBC_TimerScheduler实现.
# 2) 【lullbc】增加相应的utils支持,包括topointer, hash, printf, FuncTool的支持.
# 3) 【lullbc】object oriented增加isinstance()实现,完整实现类似python中的instance()功能.
# 4) 【lullbc】重构monkey patch打补丁机制,全部llbc功能方法/类都将统一ptach到vm中.
# 5) 【lullbc】重新调整lullbc中的lua代码及文件命名
# a. class/table: 大驼峰.
# b. function/public methods: linux命名, 如果method是private的, 前面增加_前缀.
# c. data member/local variable: linux命名, 如果是private的, 前面增加_前缀.
# d. 文件名统一使用小写并以_分隔方式组成.
#
# 2017/10/05
# 新增功能:
# 1) 【lullbc】完善lullbc中的ObjectOriented实现,增加getclass(className)接口,以支持按类名索引类.
# 2) 【lullbc】llbc.newclass(className, super)接口增加创建相同类名检测,当创建相同类名时,直接error().
# 3) 【llbc all】llbc Log组件整体增加linux&mac平台的console colourful output支持.
#
# 2017/07/22
# 1) Log增加每次Init时,尽量backup log file的操作,以确保每次启动应用时日志输出到一个全新的文件中.
#
# 2017/07/18
# 新增功能:
# 1) Log增加takeOver配置, 以支持在向未配置的logger输出message时, root logger可以接管, 并确保消息落地.
# 2) Log增加consoleLogLevel, fileLogLevel配置, 以支持对指定appender独立控制日志级别.
# 3) 新增lua语言wrap支持, 命名为lullbc, 当前对外提供了Log组件支持.
# 4) 完整更新premake脚本, 支持debug32, debug64, release32, release64本个configuration支持.
# 5) 更新pyllbc编译流程, 允许使用者通过pylib_setting.lua配置使用自己的python库进行link.
# BUG修复:
# 1) 修复LLBC_Cleanup未对Log组件进行Finalize, 导致在库销毁后出现消息未落地或者segment fault的BUG.
# 2) 小BUG, 细节调整.
#
# 2017/03/06
# 1) 对python层面的Stream.__init__增加endian keyword参数,默认为Endian.MachineEndian.
#
# 2017/02/22
# 新增功能:
# 1) c++核心层Service增加name的概念, Service的Id变成自动化设置,去除SetId接口.
# BUG修复:
# 1) 修复LLBC_ServiceMgr中相关方法实现有可能导致死锁的BUG.
#
# 2016/09/05
# 新增功能:
# 1) 增加ini文件解析引擎, 完整支持ini解析, 并支持在错误发生的时候精确定位原因及完整的错误描述, 同时支持分段定义高级功能.
# 2) 完善LLBC_String.strip()相关功能,以完整支持所有不可显字符的strip.
# BUG修复:
# 1) 修复LLBC_File对象在以TextRead打开文本时候内部open_mode转化BUG.
#
# 2016/07/03
# 1) 增加utils中增加LLBC_HashString方法, 用于计算一个字符串的hash code(不保证完全唯一).
#
# 2016/07/02
# 1) 修复TimerScheduler在关闭Strict模式的时候调度异常BUG.
# 2) 修复linux平台相关编译WARN.
#
# 2016/06/11
# 新增功能:
# 1) 调整LLBC_ICoder::Encode/LLBC_ICoder::Decode定义, 统一返回bool值指示是否encode/decode成功.
# 在失败的情况下,允许通过Packet.SetCodecError()设置错误描述,Service会将此调整统一以IFacade::OnProtoReport形式报告给Facade层面.
# 2) 调整IFacade相关接口定义, 原有OnInitialize/OnDestroy不再作为Service Start/Stop过程中的回调, 只作为Facade第一次调用OnStart前的回调及delete Service前的回调.
# OnInitialize: 在Facade添加到Service, 并且Service的随后Start调用中会被调用一次, 整个Service生命周期只会调用一次.
# OnDestroy: 在Facade添加到Service并且已经调用过OnInitialize, 如果Service被Delete, 将会触发此函数调用.
# OnStart: Service的每次Start都会触发此调用(如果对应的Facade为第一次调用, 将会先触发OnInitialize调用).
# OnStop: Service的每次Stop都会触发此调用.
# 3) 完善所有Session断开, 连接相关的错误描述, 以让应用层在收到SessionDestroy/Connect相关回调的时候, 知道是因何原因导致的断开或者连接错误.
# 对于断开支持:
# > 修改Service.RemoveSession接口, 增加一个reason参数, 用于指示因何关闭此session, 在随后的所有Facade.OnSessionDestroy中, 都将可收到此错误描述.
# > 对于网络事件导致的断开, 也将有统一的描述报告到上层.
# 对于Connect相关支持:
# > 一个连接如果失败, 也将会有相关的完整描述信息报告到上层.
# 4) Service添加GetDriveMode()方法, 以让使用者任何时候都知道Service当前运行(或已设置到)在外部驱动模式还是自驱动模式.
# 5) Service添加IsSessionValidate()方法, 以让使用者任何时候都可以较验会话是否有效.
# 6) Service添加SuppressCoderNotFoundWarning()方法, 用于抑制在包解码的时候, Coder不能找到的报错.
# 7) 调整Packet PreHandler, UnifyPreHandler定义, 在返回false的情况下, 将不断开session, 而仅仅是不继续调用后续的Handler接口.
# 8) 增加一个库配置宏(Config.h): LLBC_CFG_CORE_TIMER_STRICT_SCHEDULE, 允许编译的时候是否开启严格调度选项, 默认关闭.
# 如果开启严格调度, 则如果在timeout被检测到, 并且已经过了N个timeout周期, 框架将会被调这错过的几次timeout周期, 大部分情况下不需要如此严格, 所以将其关闭.
# 9) 其它细节代码调整, 优化.
# BUG修复:
# 1) 修复Timer在Cancel过程中可能导致的coredump的BUG.
# 2) 修复Service在SelfDrive模式下, 重复Start/Stop会因为timerScheduler无效导致coredump的BUG.
# 3) 修复core/os/console中SetConsoleColor()方法未lock的BUG.
# 4) 修复MessageBlock在Write的时候, 不能写入len为0且buf == NULL的BUG.
# 5) 修复Service在ExternalDrive模式下Stop后, 无法cancel所有timer的BUG.
# 6) 修复Service的EnableTimerScheduler()及DisableTimerScheduler()有可能导致coredump的BUG.
#
# 2016/04/20
# BUG修复:
# 1) 修复在LLBC_Session::OnClose过程中存在的OVERLAPPED结构泄露的BUG(win32特有);
# 2) 修复在LLBC_Socket::Send过程中, 可能出现的core dump的BUG;
# 3) 修复在LLBC_Socket::OnRecv在对端关闭情况下,获取不到的error相关数据的BUG;
# 4) 修复Select Poller在处理connecting会话过程中,有可能出现的fail reason无效的问题;
# 5) 修复在Iocp Poller中当LLBC_GetQueuedCompletionStatus失败后, 取得的error不准确的BUG;
# 6) 修复testsuite的Makefile BUG: make debug的时候, 不会自动link带_debug后缀的llbc库;
# 新增功能:
# 1) 更新IFacade::OnSessionDestroy(int sessionId)定义为: IFacade::OnSessionDestroy(const LLBC_SessionDestroyInfo &destroyInfo)
# 可以让使用者完整了解被关闭的session的所有信息(包括:socket描述符, 本机/对端 ip及端口信息, 关闭原因(是否由Service层面主动关闭还是其它原因), 错误码相关信息);
# 2) Service::RemoveSession方法增加一个reason参数, 以让调用者可以给一个简要的字符串描述remove session的原因;
#
# 2016/03/25
# 1) logger添加对%p支持,以打印进程Id;
# 2) logFileName添加模式支持,当前支持模式:
# %p: 当前进程Id
# %m: 当前可执行程序模块文件名(不包含路径)
#
# 2016/02/25
# 1) 重写LLBC_File,LLBC_Directory类,提供更易用,更完整,更精简的File & Directory相关操作实现;
# 2) 删除core/os/OS_File及core/os/OS_Directory实现,统一整合到LLBC_File,LLBC_Directory中;
# 3) Log模块中的logFile配置支持目录配置,log启动过程中会自动检测并创建log文件目录;
# 4) LLBC_BasicString加入findreplace实现,以支持"查找->替换"合并操作需求,优化&合并相关已有接口实现;
# 5) 调整windows平台中vsproj整体配置,增加vs2012编译支持;
# 6) 整合编译脚本,加入tools目录,将自身的python.exe依赖直接打包到tool目录,从而解除对编译机器的python要求;
# 7) wrap中初步加入c#支持csllbc(未完成);
# 8) GetVersionInfo()接口加入compiler版本相关输出;
#
# 2016/01/02
# 1) 调整windows平台的sln文件及vcproj文件路径及名字,并调整所有projects的中间文件生成路径及目标文件路径:
# a. sln文件名从llbc.sln调整成llbc_vs2008.sln,以方便后期加入其它版本vs的支持;
# b. 所有项目的vcproj文件统一放入到vcprojs/vs2008/目录中,所有中间文件的生成目录也统一配置到了vcprojs/vs2008/Debug(或者Release)目录中;
# c. 所有项目生成文件放到顶层的Debug(或者Release)目录中;
#
# 2016/01/01
# 1) 重新实现OS_Time模块,删除老的自有实现LLBC_MkTime,LLBC_GMTime,LLBC_LocalTime,改用系统自带线程安全实现,调整LLBC_GetMilliSeconds实现,
# 不使用ftime实现,使用gettimeofday(Non-WIN32),GetSystemTimeAsFileTime(WIN32)实现,并加入LLBC_GetMicroSeconds实现,同时加入了闰年判定
# 函数LLBC_IsLeapYear()及取得指定年月的此月的最大天数.
# 2) 重写LLBC_Time类,所有API重构,精度提升到MicroSecond,所有API参考C#的.Net DateTime实现;
# 3) 重写LLBC_TimeSpan类,同样参考.Net TimeSpan类,精度提升到MicroSecond;
#
# 2015/12/23
# 1) Log测试代码加入deltest代码;
# 2) OS_Time中LLBC_GetMilliSeconds实现调整为LINUX平台使用gettimeofday(),Windows平台使用GetSystemTimeAsFileTime()完成,
# 并将函数定义修改为inline;
#
# 2015/12/20
# 1) 修复Log模块中的dailyRolling在跨天的时候有可能不分文件的BUG;
# 2) 修复Log模块中的时间打印错误的BUG;
# 3) 整体重构FileLogAppender,以优化文件日志写入性能;
# 4) 日志模块加入新的配置项: flushInterval: 所有Logger刷新间隔,单位:ms,默认为200ms,最大1000ms,此配置项建议不使用
# fileBufferSize: 文件缓冲大小,单位:Byte,默认为1M,此配置项建议不使用;
#
# 2015/11/10
# 1) 修复BasicString在LINUX编译WARN;
# 2) 修复Logger在配置读取时level配置项读取错误的BUG;
# 3) Makefile中加入install commands;
#
# 2015/10/18
# 1) 整体重构框架编译makefile代码,以去除旧的相对落后的编译识别方式及优化编译识别速度,主要更新:
# a. 新的编译流程将依赖分析细化到所有.cpp/.h文件,任何.h文件改动都将触发相关依赖于此文件的.cpp文件重新编译;
# b. 重构整个文件搜索算法,支持无限层次扩展,同时优化整个搜索速度,不管项目目录层次有多深及代码有多少,编译分析过程都将变得非常快速;
# c. 去除之前%.o: %.c/.cpp隐式依赖编译实现,直接对所有文件执行显式编译,以去除make的任何不必要的文件推导过程;
# d. 重构过程直接修复旧的make编译相关实现中的debug/release交叉使用的时候出现的.o文件共用的BUG(由模式变量DEBUG引起);
# e. 删除了所有不必要的XXXX.linux, XXXX.mac编译支持文件(包括rules.mk及Makefile),只保留一个rules.mk及一个Makefile;
# f. 整个项目顶层Makefile也执行重构,以执行更精细化的编译.当前不支持直接make编译,需要输入具体的编译goal, 如需编译项目,请运行make或者make help查看;
#
# 2015/10/03
# 1) 修复Property中的value部分解析时未unescape的BUG;
# 2) 整理Macro.h/MacroInl.h文件;
# 3) 修复LLBC_Packet中有关header part get/set接口的BUG及整体重写此部分代码(使用不方便及类型不兼容时产生的BUG);
# 主要修复在get/set的类型长度跟part定义中的长度不符时候的处理BUG问题,如part为4,但在使用时想取得short数据,老代码将出现严重BUG;
# 统一区分non-float type及float-type的get/set接口,在part的传输过程中可能涉及字节序列的转换以及模板匹配,需要对float/double单独实现get/set;
# 去除有关之前自定义包头的相关代码实现中的冗余代码;
# 优化LLBC_Packet中有关header part的操作接口便利性,在part为4字节长度的时候,你可以get/set 1/2/8字节长度的数据,在内部将完成part中的4字节定义的转换;
# 4) 重写LLBC_PacketHeaderDesc类中的数据组织方式代码,以取得更高的效率(此类的相关接口使用频繁);
# 5) 增加LLBC_PacketHeaderParts实现,以完整实现包头自定义功能,对于单播,组播及广播,都将在最后附带此数据,指示Packet还需要设置哪些包头数据;
# 使用者在自定义包头后,在发送时,应该将所有自己额外的包头数据设置在此类对象中,再将由框架统一完成LLBC_Packet的包头设置;
# 6) 调整LLBC_IService接口,加入Send2/Multicast2/Broadcast2方法,以区分有LLBC_PacketHeaderParts *参数及无LLBC_PacketHeaderParts *参数时的方法定义;
# 7) 细化在BeforeIncl.h/AfterIncl.h中的相关宏限制;
#
# 2015/09/14
# 1) 修复LLBC_BasicString中的escape/unescape错误.
# 2) 去除LLBC_Property的DISABLE_ASSIGNMENT的限制,加入copy constructor及operator =()实现.
#
# 2015/09/14
# 1) 重写.cfg文件读写类LLBC_Properties,更名为LLBC_Property,废除初始只为实现功能而编码的旧类,新类直接支持所有特性,包括路径访问及智能路径扩充.
# 2) 考虑很多使用场景都需要字符串数组,加入LLBC_StringsA/LLBC_StringsW定义.
# 3) LLBC_BasicString<>加入replace的const方法,返回replaced后的字符串.
# 4) 修复LLBC_BasicString<>.rstrip()的BUG.
# 5) LLBC_BasicString<>加入escape/unescape支持,直接转义/反转义字符串.
# 6) 删除所有旧式的SAFE_FREE,SAFE_DELETE,SAFE_DELETES,统一使用LLBC_XFree,LLBC_XDelete,LLBC_XDeletes代替.
# 7) OS_Directory部分加入LLBC_JoinDirectory封装,并将原来LLBC_Directory中的目录相关函数调整到此.
# 8) log模块配置定义修改,不需要前缀:llbc.log,cfg配置文件中的property name第一个就是logger的名字.
#
# 2015/09/14
# 1) 整体框架调整(3月到8月间的修改部分未作记录,未作记录,只描述2015/09月份的修改)
# a. 加入包头自定义支持,允许使用者直接自定义适合自己项目情况的包头结构.
# b. 修复LLBC_BasicString, LLBC_Stream的从多内部细节错误,基本都为致命错误.
# c. 在WIN32平台中,去除MFC依赖(afx.h),以加快编译速度及整体简洁度.
# d. 整体显式实例化LLBC_BasicString<char>, LLBC_BasicString<wchar>,执行统一的模块错误修复.
#
# 2015/03/16
# 1) Service加入延迟执行delegate支持.
#
# 2015/02/07
# 1) 统一所有llbc内部用到的参数格式化相关的代码,使用LLBC_FormatArg直接完成参数的格式化.
# 2) 修复Logger中在参数在2048临界状态的时候导致的coredump的BUG.
# 3) 修复SelectPoller在service频繁发包的时候,响应迟钝的BUG.
#
# 2015/01/10
# 1) 去除FilterProtocol层的设计, 加入ProtocolFilter设计,所有ProtocolLayer都可以设置ProtocolFilter.
#
# 2014/12/29
# 1)Service加入UnifyPreSubscribe支持,允许统一对packet设置pre-handler(适用于RAW及NORMAL类型的Service).
#
# 2014/12/27
# 1)Service加入SubscribeStatus支持,允许订阅指定opcode的指定status的包,以便对此包作特殊处理,如果订阅,将不会再调默认包处理函数(由Subscribe注册)(需要将LLBC_CFG_COMM_ENABLE_STATUS_HANDLER宏开启).
# 2)Service加入RegisterStatusDesc支持,允许在Service中注册指定status code的字符串描述信息,如果注册,在Packet中,将可以通过GetStatusDesc()得到此描述(需要将LLBC_CFG_COMM_ENABLE_STATUS_DESC宏开启).
#
# 2014/12/20
# 1)去除testsuite中的旧代码风格(13年以前的测试代码).
#
# 2014/12/19
# 1)core/utils模块加入Util_Network相关代码,用于支持IPv4地址判断.
# 2)ExportHeader.h导出限定头文件统一改名为Export.h.
#
# 2014/12/17
# 1)Facade中加入OnUnhandledPacket()事件调用接口,如果一个包未在service中订阅,将会使用此方法进行处理.
#
# 2014/12/9
# 1)Stream默认的endian设置依据Config.h中的配置来确认,不使用机器字节序.
# 2)service的Listen/Connect/AsyncConn接口将允许在service未开启的时候调用,操作操作将会延迟到service的Start函数中完成.
#
# 2014/12/02
# 完成communication库的整体重构,测试,简化架构,性能及接口.
#
# 2014/11/09
# 更新Dispatcher相关代码细节,修复在极端情况下的内存泄露BUG.
# !!!!!!!! 此版本将到此为止, 后面将统一重构网络部分代码实现,以更好的支持并发及后期的重连实现.
#
# 2014/11/07
# 加入LLBC_InvokeGuard, 以支持在复杂的函数逻辑中多返回点的资源自动释放.
#
# 2014/10/14
# 更新LLBC_String,增加split接口,类似python中的str.split.
#
# 2014/10/07
# 1)更新BasicString,在DeSerialize的过程中,如果Stream可读字节数为0,返回false.
# 2)更新Stream的DeSerialize std::string的特化,如果Stream可读字节数为0,返回false.
# 3)更新STLHelper,以支持std::stack,std::queue的操作.
# 4)在Macro.h中,加入LLBC_Deletes/LLBC_XDeletes的实现.
#
# 2014/09/06
# 1)调整LibTls中的TimerScheduler实现,不由service创建,每个由task创建的线程,都将带有TimerScheduler.
# 2)将BaseTimer::GetTimer()由private属性调整到public属性,以方便上层打印timer属性.
# 3)修复BinaryHeap在只有一个堆元素的时候,重复删除BUG.
#
# 2014/08/15
# 1)增加LLBC_Free, LLBC_XFree, LLBC_Delete, LLBC_XDelete, LLBC_New等相关内存分配及释放相关宏,以简化并统一管理内存,也用于以后废除SAFE_XXX()这一套宏.
# 2)优化Log模块性能,减少malloc调用频繁度.
# 3)为适应相关上层脚本封装,对原来的filename存储策略从const char *更改为char *,不对此字段作任何是字符串常量的假设,直接从堆中分配内存进行存储.
#
# 2014/08/14
# 1)更新LLBC_Properties接口及实现,加入Delete方法,以支持对指定key的property进行移除,所有方法中的原始const char *类型统一更新为const LLBC_String &类型.
# 2)更新WIN平台中的OS API 及 WSA 两类错误描述的输出,不使用SYSTEM_DEFAULT的语言,统一使用英文输出,以让所有的错误输出兼容任意的多字节字符集.
#
# 2014/08/11
# 1)加入允许自定义错误id及描述支持,错误ID范围:[0,65535], 需要使用LLBC_BuildCustomErrno()生成真正的错误ID.
# llbc自带了一些脚本语言的封装,如python的封装:pyllbc, 在此类封装中,会使用自定义的id部分,详细需要看各自封装实现中的说明,但基本都是从高往低占用,
# 建议使用者选择[0, 60000]范围的id用于自己的代码中.
#
# 2014/07/26
# 1)去除LLBC_Int2Str,LLBC_UInt2Str, ...这类number -> string的转换函数,统一使用模板函数LLBC_Num2Str<>代替.
#
# 2014/07/24
# 1)重写EventManager,对每次的AddListener返回一个存根,以可以只针对存根取消此listener.
# 2)优化communication模块,整体上优化IocpDispatcher及EpollDispatcher性能,使得收发速度达到最高.
# 3)修复error消息格式化模块中在找不到error code找不到定义时,有可能出现的崩溃的错误(WIN32平台.
# 4)调整整体代码风格,去除成员变量m_xxx命名方式,使用_xxx的命名,对于if(,while(,for(更新成if (,while (,for (,此次更新不包括testsuite模块.
# 5)条件限制原因,只此次更新只在linux/win32平台编译,测试通过.
#
# 2014/05/05
# 1)增加objbase支援,支援全套的对象引用/释放机制(类似obj-c),同时提供完整的Object Array,Object Dictionary支援及完整的对象迭代器支援.
# 2)修改core/config中的LLBC_Config类实现,在解析json出错的时候,GetError()同时返回出错文件及行号(前面的版本中,只返回行号,文件未知).
# 3)修复communication中的同个socket/session的MessageBlock处理有可能被乱序处理的致命BUG.
# 4)调整Dispatcher/Service全套接口,完善细节代码.
# 5)Variant加入dictionary支援,完整实现variant所有接口,加入JVHelper,直接完成json到variant的转换.
#
# 2014/01/12
# 1)调整Communication整体实现,允许不启动NetEventHandler线程,而使用Dispatcher线程来直接完成网络事件的处理,以减少线程间交互的开销.
# 2)Service::Start()方法中的handlerCount参数默认值,客户端类型由1调整为0.
# 3)考虑LLBC_File::WriteString()的使用实际情况,往往都不需要写入字符串结束符'\0',加入一个参数,以标记是否写入字符串结束符,为了兼容库中已经有的调用及测试代码,默认值为true.
#
# 2014/01/11
# 1)修复LLBC_BasicString模板类的format/append_format/vformat/append_vformat四个函数在非win32可能崩溃的bug.
# 2)完善库内部本身使用的LibTls结构,以让库中不同模块能够结合的更紧密.
# 3)BaseTimer去除 SetScheduler() 接口,不需要使用者调用,将会默认从TLS中取得当前线程对应的Scheduler来Schedule.
#
# 2013/12/20
# 1)Stream增加GetBufStartWithPos()接口.
# 2)调整sampler实现,加入sampler group,以整体管理samplers,并为service加入完成的运行时Dump功能实现及测试代码.
#
# 2013/12/14
# 1)将Core/utils/Util_Coder相关实现调整到common中,使得字节序支持能够在common的LLBC_Stream中使用.
# 2)LLBC_Stream接口调整,修改,简化LLBC_Stream之前的Attach及Assign,增加SetEndianType接口,以提供对不同字节序的byte buffer的支持.
#
# 2013/12/12
# 1)优化 non-WIN32 平台编译选项,以减少不必要的符号导出,减小最终库文件大小.
#
# 2013/12/09
# 1)允许LLBC_Stream进行直接copy.
#
# 2013/12/06
# 1)优化TimerScheduler中Timer的调度策略,使得Timer调度速度快一倍.
# 2)修复Directory相关代码在WIN32中编译Unicode版本库的时候,不能编译的BUG.
# 3)开始为vcproj中加入Release的项目设置,框架已相对稳定,所以将默认编译方式调整成Release方式(WIN32).
#
# 2013/12/04
# 1)加入Timer测试代码.
# 2)调整Facade::OnInitialize()调用实现,原来调用实现是由调用Service::Start的线程调用,现在统一修改为由Service内部线程完成调用,以去除多线程问题.
# 对于Service的RunningMode为External_Drive方式的,保留由调用Service::Start的线程调用Facade::OnInitialize()的实现方式.
#
# 2013/12/01
# 1)重新设计Timer, 使得Timer在使用的时候,更简单,方便,并且更好的支持实际应用的中模块化编码(未测试).
# 2)重新设计Sampler, 对于之前设计实现的采样器,在使用中存在的问题进行修复(未测试).
#
# 2013/11/25
# 1)加入采样器实现,支持计数开型,间隔型(允许得出速率),及上下限型采样器,并运用于Service中,在支持Service自己dump自己的运行状态.
# 对Service采样会降低效率,但该功能默认为开启,如果不需要采样Service,需要在common/Config.h中找到LLBC_CFG_COMM_ENABLE_SAMPLER_SUPPORT,设置为0即可.
#
# 2013/11/17
# 1)修复PacketProtocol中收包可能存在丢包的BUG.
# 2)增加LogProtocol,用于临时调试,如果要使用此Protocol,请使用LLBC_CustomClient/LLBC_CustomServer来自定义自己的协议链.
# 3)修复所有库内自带singleton类未export或者hidden,从而导致多个singleton类实例存在的BUG.
# 4)调整logger实现,支持面向流的log模型,以防止打印非原始类型的时候,导致的core dump问题,同时保留原来的format方式实现,增加一个config宏进行切换,
# 功能宏定义在llbc/common/Config.h中,LLBC_CFG_LOG_USING_WITH_STREAM,默认为1,即以流的方式使用logger.如果需要使用format方式,请配置成0
# 并重新编译库.
#
# 2013/11/13
# 1)调整communication中的protocol设计,整合协议层,加入customclient/customserver两种service以及protocols analyzer,以支持自定义协议.
# 2)调整core/eventmanager,支持事件内的事件增加、删除及递归触发.
# 3)调整service,将event整合到service中,以支持跨线程,异步事件.
#
# 2013/10/30
# 1)为LLBC_String加入utf8操作支持(长度计算,字符串切割及打散).
#
# 2013/10/29
# 1)考虑到std::string使用的普遍性(有时不使用LLBC_String),在LLBC_Stream中加入std::string的serialize/deserialize偏特化.
# 2)为LLBC_Stream增加序列化所有STL容器的默认支持(WIN32: vec, list, deque, Non-WIN32: vec, list, deque, set, map).
#
# 2013/10/27
# 1)修复WIN32下如果使用IOCP dispatcher model,LLBC_IService::AsyncConnect()ip为非127.0.0.1的时候,返回失败的BUG.
# 2)修改core/thread/MessageBlock.h 中的MessageBlock实现,优化代码结构,非WIN32平台使用condition varibale实现.WIN32下保留semaphore实现.
# 3)移动llbc.h中LLBC_Startup, LLBC_Cleanup函数实现,放入llbcImpl.h头文件中,以使llbc.h最简洁.
# 4)communication模块增加SessionEvBuilder,将Session中的event构造逻辑单独出来.
#
# 2013/10/14
# 1)重新实现LLBC_ConditionVariable,参考pthread win32的实现,以消除旧版本中存在的多次Notify的BUG.
# 2)提供LLBC_Bundle在非Iphone平台的伪实现.
# 3)更新LLBC_File,LLBC_Directory, 在core/os中加入跟 目录/文件 操作相关的平台无关函数实现.
# 4)增加LLBC_ReverseGuard反向守护.
#
# 2013/10/10
# 1)在mac,iphone编译,测试通过.
#
# 2013/10/6
# 1)加入Iocp实现(WIN32平台有效),完善Communication中Asynchronous connect实现.
# 2)修复Communication中的NetEventHandler线程代码中存在的内存泄露.
# 3)加入RawServer/RawClient支持,并加入测试代码.这两个Service允许开发者接收无格式的网络流数据.
# 4)修复LLBC_GetCurrentDirectory()函数在WIN32平台内存泄露问题.
# 5)对库本身的Error报告机制进行完善,对WIN32中WinSock错误记录及报告进行完善.
#
# 2013/10/01
# 1)加入Library封装,支援跨平台库符号访问.
#
# 2013/09/25
# 1)加入TransCoder,以支援字符集转换.
# 2)抽象communication中的Dispatcher实现,在特定平台,可以在common/Config.h中选择事件模型(Select,Iocp, Epoll)来进行库的编译.
# 3)修复Select模式下库CPU占用过高的BUG.
#
# 2013/09/16
# 1)为Service增加FPS概念,使得整个Service的服务周期变得可更改.
# 2)为Service增加OnIdle(当前帧还有空闲时间的时候回调), OnDestroy(Service销毁的时候调用)通知机制,完善面向服务框架.
# 3)增加Asynchronous-Connect异步connect机制,使得connect操作异步化.
# 4)重写core/helper/STLHelper, 统一所有container操作接口.
# 5)修复在WIN32平台下如果出现NETAPI错误的时候,取得的SubErrorNo为0的问题.
#
# 2013/08/26
# 1)初步完成完整版本,跨跃WIN32/LINUX/MAC/Iphone四个平台.
# 2)提供平台无关基础库,方法封装.
# 3)库本身提供完整的Error报告机制.
# 4)提供MD5, Time, Serialize, Json, Properties, Timer ...相关基础功能.
# 5)提供多线程支持,使用Task简化线程使用.支持完整的平台无关线程操作支持.
# 6)提供完的log特性支持,类似log4cxx,支持多个日志记录器,支持同/异步设置,支持按天分日志,按大小切割日志.
# 7)提供network支援,封装socket,使用session概念,简化通信.使用服务模型.包使用包链方式完成自动路由.
# 8)提供Bundle支持(特定行移动平台操作系统Iphone).
#
# long long ago
# 1)设计框架,设计common, core基础核心部分代码.