transactd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/BUILD_UNIX-JA +46 -67
  3. data/BUILD_WIN-JA +106 -63
  4. data/CMakeLists.txt +40 -15
  5. data/README +219 -75
  6. data/README-JA +207 -76
  7. data/README_ORMSRCGEN +118 -0
  8. data/README_ORMSRCGEN-JA +115 -0
  9. data/bin/common/tdclc_32_2_0.dll +0 -0
  10. data/bin/common/tdclc_64_2_0.dll +0 -0
  11. data/build/common/check_for_link_iconv.cmake +18 -14
  12. data/build/common/create_symlink.cmake.in +25 -0
  13. data/build/common/get_boost_libs.cmake +23 -23
  14. data/build/common/options.cmake +0 -66
  15. data/build/common/smart_install.cmake +3 -3
  16. data/build/common/transactd.rc.in +15 -5
  17. data/build/common/transactd_cl_common.cmake +37 -18
  18. data/build/common/transactd_cl_output.cmake +55 -13
  19. data/build/common/transactd_common.cmake +108 -31
  20. data/build/swig/php/generate.cmake.in +15 -17
  21. data/build/swig/php/generate.cmd.in +15 -9
  22. data/build/swig/php/php.swg +124 -82
  23. data/build/swig/php/transactd.no_yield.php +4494 -0
  24. data/build/swig/php/transactd.no_yield.php.git.patch +685 -0
  25. data/build/swig/php/transactd.no_yield.php.patch +685 -0
  26. data/build/swig/php/transactd.yield.php +4461 -0
  27. data/build/swig/php/transactd.yield.php.git.patch +652 -0
  28. data/build/swig/php/transactd.yield.php.patch +652 -0
  29. data/build/swig/referencecounter.h +79 -0
  30. data/build/swig/ruby/ruby.swg +226 -76
  31. data/build/swig/ruby/threadBlockRegionWrapper.h +71 -0
  32. data/build/swig/ruby/without_gvl.swg +87 -0
  33. data/build/swig/tdcl.i +659 -170
  34. data/build/swig/validatablepointer.h +91 -0
  35. data/build/tdclc/CMakeLists.txt +49 -34
  36. data/build/tdclc/{tdclc_64.cbproj → tdclc.cbproj} +65 -20
  37. data/build/tdclc/tdclc.rc +0 -0
  38. data/build/tdclcpp/CMakeLists.txt +84 -20
  39. data/build/tdclcpp/tdclcpp.rc +0 -0
  40. data/build/tdclcpp/{tdclcpp_bcb_64.cbproj → tdclcpp_bc.cbproj} +168 -44
  41. data/build/tdclrb/CMakeLists.txt +84 -66
  42. data/build/tdclrb/bldgem/extconf.rb +28 -3
  43. data/build/tdclrb/gem/helper.rb +11 -1
  44. data/build/tdclrb/gem_output.cmake +20 -16
  45. data/index_ja.html +15 -0
  46. data/source/bzs/db/IBlobBuffer.h +15 -17
  47. data/source/bzs/db/blobBuffer.h +186 -140
  48. data/source/bzs/db/blobStructs.h +37 -37
  49. data/source/bzs/db/engine/mysql/IReadRecords.h +34 -34
  50. data/source/bzs/db/engine/mysql/bookmark.h +150 -147
  51. data/source/bzs/db/engine/mysql/database.cpp +1721 -1526
  52. data/source/bzs/db/engine/mysql/database.h +608 -370
  53. data/source/bzs/db/engine/mysql/dbManager.cpp +213 -201
  54. data/source/bzs/db/engine/mysql/dbManager.h +115 -104
  55. data/source/bzs/db/engine/mysql/errorMessage.cpp +49 -50
  56. data/source/bzs/db/engine/mysql/errorMessage.h +25 -26
  57. data/source/bzs/db/engine/mysql/fieldAccess.h +55 -61
  58. data/source/bzs/db/engine/mysql/mydebuglog.cpp +326 -292
  59. data/source/bzs/db/engine/mysql/mydebuglog.h +63 -55
  60. data/source/bzs/db/engine/mysql/mysqlInternal.h +182 -125
  61. data/source/bzs/db/engine/mysql/mysqlThd.cpp +121 -121
  62. data/source/bzs/db/engine/mysql/mysqlThd.h +20 -20
  63. data/source/bzs/db/engine/mysql/percentageKey.h +241 -228
  64. data/source/bzs/db/protocol/ICommandExecuter.h +18 -17
  65. data/source/bzs/db/protocol/hs/hsCommandExecuter.cpp +543 -514
  66. data/source/bzs/db/protocol/hs/hsCommandExecuter.h +155 -158
  67. data/source/bzs/db/protocol/tdap/btrDate.cpp +213 -180
  68. data/source/bzs/db/protocol/tdap/btrDate.h +39 -37
  69. data/source/bzs/db/protocol/tdap/client/activeTable.cpp +173 -0
  70. data/source/bzs/db/protocol/tdap/client/activeTable.h +165 -0
  71. data/source/bzs/db/protocol/tdap/client/activeTableImple.h +370 -0
  72. data/source/bzs/db/protocol/tdap/client/bulkInsert.h +13 -23
  73. data/source/bzs/db/protocol/tdap/client/client.cpp +81 -68
  74. data/source/bzs/db/protocol/tdap/client/client.h +361 -320
  75. data/source/bzs/db/protocol/tdap/client/connMgr.cpp +17 -22
  76. data/source/bzs/db/protocol/tdap/client/connMgr.h +17 -19
  77. data/source/bzs/db/protocol/tdap/client/connectionPool.cpp +243 -0
  78. data/source/bzs/db/protocol/tdap/client/connectionPool.h +109 -0
  79. data/source/bzs/db/protocol/tdap/client/database.cpp +327 -219
  80. data/source/bzs/db/protocol/tdap/client/database.h +141 -118
  81. data/source/bzs/db/protocol/tdap/client/databaseFactory.cpp +60 -62
  82. data/source/bzs/db/protocol/tdap/client/databaseManager.h +255 -0
  83. data/source/bzs/db/protocol/tdap/client/dbDef.cpp +315 -202
  84. data/source/bzs/db/protocol/tdap/client/dbDef.h +40 -32
  85. data/source/bzs/db/protocol/tdap/client/dllmain.cpp +390 -371
  86. data/source/bzs/db/protocol/tdap/client/errorMessage.cpp +148 -56
  87. data/source/bzs/db/protocol/tdap/client/errorMessage_ja.cpp +149 -57
  88. data/source/bzs/db/protocol/tdap/client/export.h +35 -0
  89. data/source/bzs/db/protocol/tdap/client/field.cpp +1985 -0
  90. data/source/bzs/db/protocol/tdap/client/field.h +393 -0
  91. data/source/bzs/db/protocol/tdap/client/fieldDDF.cpp +14 -14
  92. data/source/bzs/db/protocol/tdap/client/fieldDDF.h +11 -14
  93. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.cpp +123 -0
  94. data/source/bzs/db/protocol/tdap/client/fieldNameAlias.h +58 -0
  95. data/source/bzs/db/protocol/tdap/client/fields.h +178 -0
  96. data/source/bzs/db/protocol/tdap/client/fileDDF.cpp +13 -16
  97. data/source/bzs/db/protocol/tdap/client/fileDDF.h +11 -17
  98. data/source/bzs/db/protocol/tdap/client/filter.h +423 -259
  99. data/source/bzs/db/protocol/tdap/client/groupComp.h +117 -0
  100. data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +818 -0
  101. data/source/bzs/db/protocol/tdap/client/groupQuery.h +281 -0
  102. data/source/bzs/db/protocol/tdap/client/indexDDF.cpp +14 -17
  103. data/source/bzs/db/protocol/tdap/client/indexDDF.h +11 -14
  104. data/source/bzs/db/protocol/tdap/client/memRecord.cpp +231 -0
  105. data/source/bzs/db/protocol/tdap/client/memRecord.h +145 -0
  106. data/source/bzs/db/protocol/tdap/client/memRecordset.cpp +448 -0
  107. data/source/bzs/db/protocol/tdap/client/memRecordset.h +159 -0
  108. data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +300 -173
  109. data/source/bzs/db/protocol/tdap/client/nsDatabase.h +53 -36
  110. data/source/bzs/db/protocol/tdap/client/nsTable.cpp +171 -128
  111. data/source/bzs/db/protocol/tdap/client/nsTable.h +121 -87
  112. data/source/bzs/db/protocol/tdap/client/pooledDatabaseManager.h +173 -0
  113. data/source/bzs/db/protocol/tdap/client/recordset.cpp +209 -0
  114. data/source/bzs/db/protocol/tdap/client/recordset.h +86 -0
  115. data/source/bzs/db/protocol/tdap/client/recordsetImple.h +596 -0
  116. data/source/bzs/db/protocol/tdap/client/request.h +227 -170
  117. data/source/bzs/db/protocol/tdap/client/serializer.cpp +1288 -0
  118. data/source/bzs/db/protocol/tdap/client/serializer.h +295 -0
  119. data/source/bzs/db/protocol/tdap/client/sharedData.cpp +9 -12
  120. data/source/bzs/db/protocol/tdap/client/sharedData.h +18 -16
  121. data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +494 -473
  122. data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +51 -53
  123. data/source/bzs/db/protocol/tdap/client/stringConverter.h +214 -148
  124. data/source/bzs/db/protocol/tdap/client/table.cpp +929 -1665
  125. data/source/bzs/db/protocol/tdap/client/table.h +413 -87
  126. data/source/bzs/db/protocol/tdap/client/trdboostapi.h +642 -534
  127. data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +25 -40
  128. data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +11 -15
  129. data/source/bzs/db/protocol/tdap/client/trdormapi.h +378 -437
  130. data/source/bzs/db/protocol/tdap/client/trnsctcl.def +1 -1
  131. data/source/bzs/db/protocol/tdap/fieldComp.h +127 -0
  132. data/source/bzs/db/protocol/tdap/myDateTime.cpp +352 -345
  133. data/source/bzs/db/protocol/tdap/mysql/characterset.cpp +75 -78
  134. data/source/bzs/db/protocol/tdap/mysql/characterset.h +18 -19
  135. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +216 -199
  136. data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +23 -14
  137. data/source/bzs/db/protocol/tdap/mysql/debuglog.cpp +354 -314
  138. data/source/bzs/db/protocol/tdap/mysql/debuglog.h +57 -47
  139. data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +905 -739
  140. data/source/bzs/db/protocol/tdap/mysql/request.h +152 -159
  141. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +1044 -879
  142. data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +87 -81
  143. data/source/bzs/db/protocol/tdap/tdapRequest.h +162 -130
  144. data/source/bzs/db/protocol/tdap/tdapSchema.cpp +368 -166
  145. data/source/bzs/db/protocol/tdap/tdapSchema.h +702 -566
  146. data/source/bzs/db/protocol/tdap/tdapcapi.h +387 -353
  147. data/source/bzs/db/transactd/appBuilderImple.h +21 -20
  148. data/source/bzs/db/transactd/appModule.cpp +350 -98
  149. data/source/bzs/db/transactd/appModule.h +31 -37
  150. data/source/bzs/db/transactd/connManager.cpp +138 -135
  151. data/source/bzs/db/transactd/connManager.h +28 -21
  152. data/source/bzs/db/transactd/connectionRecord.h +39 -39
  153. data/source/bzs/db/transactd/transactd.cpp +217 -203
  154. data/source/bzs/env/boost_bcb_link.h +131 -0
  155. data/source/bzs/env/compiler.h +136 -79
  156. data/source/bzs/env/crosscompile.cpp +57 -57
  157. data/source/bzs/env/crosscompile.h +130 -115
  158. data/source/bzs/env/fileopen.h +7 -8
  159. data/source/bzs/env/mbcswchrLinux.cpp +4 -9
  160. data/source/bzs/env/mbcswchrLinux.h +37 -34
  161. data/source/bzs/env/tcharMinGW.h +59 -0
  162. data/source/bzs/env/tstring.h +90 -95
  163. data/source/bzs/example/changeSchema.cpp +22 -23
  164. data/source/bzs/example/changeSchema_c.cpp +22 -24
  165. data/source/bzs/example/connection_pool_c.cpp +49 -104
  166. data/source/bzs/example/createDatabase.cpp +40 -47
  167. data/source/bzs/example/createDatabase_c.cpp +38 -43
  168. data/source/bzs/example/deleteRecords.cpp +10 -15
  169. data/source/bzs/example/deleteRecords_c.cpp +10 -14
  170. data/source/bzs/example/dropDatabase.cpp +3 -9
  171. data/source/bzs/example/dropDatabase_c.cpp +5 -6
  172. data/source/bzs/example/insertRecords.cpp +37 -29
  173. data/source/bzs/example/insertRecords_c.cpp +19 -25
  174. data/source/bzs/example/ormap_c.cpp +621 -0
  175. data/source/bzs/example/queryData.cpp +371 -0
  176. data/source/bzs/example/queryData.h +16 -0
  177. data/source/bzs/example/query_c.cpp +109 -0
  178. data/source/bzs/example/readRecords.cpp +27 -27
  179. data/source/bzs/example/readRecords_c.cpp +25 -23
  180. data/source/bzs/example/updateRecords.cpp +16 -21
  181. data/source/bzs/example/updateRecords_c.cpp +8 -12
  182. data/source/bzs/example/update_with_transaction.cpp +21 -24
  183. data/source/bzs/example/update_with_transaction_c.cpp +12 -15
  184. data/source/bzs/example/useORMRecord.cpp +177 -0
  185. data/source/bzs/netsvc/client/tcpClient.cpp +167 -156
  186. data/source/bzs/netsvc/client/tcpClient.h +541 -489
  187. data/source/bzs/netsvc/server/IAppModule.h +119 -32
  188. data/source/bzs/netsvc/server/iserver.h +21 -23
  189. data/source/bzs/netsvc/server/serverCpt.cpp +421 -391
  190. data/source/bzs/netsvc/server/serverCpt.h +41 -43
  191. data/source/bzs/netsvc/server/serverPipe.cpp +580 -565
  192. data/source/bzs/netsvc/server/serverPipe.h +44 -45
  193. data/source/bzs/netsvc/server/serverTpool.cpp +333 -303
  194. data/source/bzs/netsvc/server/serverTpool.h +38 -43
  195. data/source/bzs/rtl/benchmark.cpp +91 -31
  196. data/source/bzs/rtl/benchmark.h +76 -22
  197. data/source/bzs/rtl/datetime.cpp +231 -233
  198. data/source/bzs/rtl/datetime.h +16 -16
  199. data/source/bzs/rtl/debuglog.cpp +48 -51
  200. data/source/bzs/rtl/debuglog.h +55 -44
  201. data/source/bzs/rtl/exception.h +55 -48
  202. data/source/bzs/rtl/stl_uty.cpp +27 -28
  203. data/source/bzs/rtl/stl_uty.h +28 -29
  204. data/source/bzs/rtl/stringBuffers.cpp +8 -6
  205. data/source/bzs/rtl/stringBuffers.h +16 -9
  206. data/source/bzs/rtl/strtrim.cpp +90 -91
  207. data/source/bzs/rtl/strtrim.h +14 -16
  208. data/source/bzs/test/tdclatl/bench_query_atl.js +647 -0
  209. data/source/bzs/test/tdclatl/bench_tdclatl.js +303 -303
  210. data/source/bzs/test/tdclatl/test_query_atl.js +669 -0
  211. data/source/bzs/test/tdclphp/bench.php +357 -0
  212. data/source/bzs/test/tdclphp/transactd_Test.php +907 -303
  213. data/source/bzs/test/tdclphp/transactd_blob_Test.php +21 -49
  214. data/source/bzs/test/tdclphp/transactd_datetime_Test.php +41 -75
  215. data/source/bzs/test/tdclphp/transactd_kanjischema_Test.php +23 -37
  216. data/source/bzs/test/tdclphp/transactd_pool_Test.php +120 -0
  217. data/source/bzs/test/tdclrb/bench_tdclcpp.rb +4 -6
  218. data/source/bzs/test/tdclrb/prepare.rb +15 -12
  219. data/source/bzs/test/tdclrb/transactd_blob_spec.rb +29 -32
  220. data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -29
  221. data/source/bzs/test/tdclrb/transactd_kanjischema_spec.rb +18 -19
  222. data/source/bzs/test/tdclrb/transactd_pool_spec.rb +107 -0
  223. data/source/bzs/test/tdclrb/transactd_spec.rb +734 -142
  224. data/source/bzs/test/transactdBench/query_bench.cpp +156 -0
  225. data/source/bzs/test/transactdBench/scaling_bench.cpp +265 -0
  226. data/source/bzs/test/transactdBench/transactdBench.cpp +107 -83
  227. data/source/bzs/test/transactdBench/transactdBench2.cpp +122 -83
  228. data/source/bzs/test/transactdBench/workerBase.cpp +5 -0
  229. data/source/bzs/test/transactdBench/workerBase.h +88 -0
  230. data/source/bzs/test/transactdBench/workerMySQLImple.h +333 -0
  231. data/source/bzs/test/transactdBench/workerTransactdImple.h +201 -0
  232. data/source/bzs/test/trdclengn/test_blob.cpp +121 -73
  233. data/source/bzs/test/trdclengn/test_trdclengn.cpp +1244 -426
  234. data/source/global/ormsrcgen/confParam.h +80 -0
  235. data/source/global/ormsrcgen/fieldName.cpp +77 -0
  236. data/source/global/ormsrcgen/fieldName.h +43 -0
  237. data/source/global/ormsrcgen/main.cpp +196 -0
  238. data/source/global/ormsrcgen/srcgen.cpp +763 -0
  239. data/source/global/ormsrcgen/srcgen.h +72 -0
  240. data/source/global/ormsrcgen/template/fieldNameList_sample.txt +2 -0
  241. data/source/global/ormsrcgen/template/ormDataClass_template.cpp +48 -0
  242. data/source/global/ormsrcgen/template/ormDataClass_template.h +34 -0
  243. data/source/global/ormsrcgen/template/ormMapClass_template.cpp +51 -0
  244. data/source/global/ormsrcgen/template/ormMapClass_template.h +62 -0
  245. data/source/global/ormsrcgen/template/template.cnf +38 -0
  246. data/source/global/querystmts/querystmts.cpp +237 -0
  247. data/source/global/tdclatl/ConnectParams.cpp +77 -0
  248. data/source/global/tdclatl/ConnectParams.h +70 -0
  249. data/source/global/tdclatl/Database.cpp +132 -128
  250. data/source/global/tdclatl/Database.h +60 -49
  251. data/source/global/tdclatl/DbDef.cpp +68 -64
  252. data/source/global/tdclatl/DbDef.h +36 -36
  253. data/source/global/tdclatl/Field.cpp +12 -17
  254. data/source/global/tdclatl/Field.h +15 -12
  255. data/source/global/tdclatl/FieldDef.cpp +75 -36
  256. data/source/global/tdclatl/FieldDef.h +38 -19
  257. data/source/global/tdclatl/FieldDefs.cpp +74 -0
  258. data/source/global/tdclatl/FieldDefs.h +56 -0
  259. data/source/global/tdclatl/FieldNames.cpp +99 -0
  260. data/source/global/tdclatl/FieldNames.h +66 -0
  261. data/source/global/tdclatl/Flags.cpp +75 -37
  262. data/source/global/tdclatl/Flags.h +13 -12
  263. data/source/global/tdclatl/GroupQuery.cpp +119 -0
  264. data/source/global/tdclatl/GroupQuery.h +65 -0
  265. data/source/global/tdclatl/KeyDef.cpp +15 -14
  266. data/source/global/tdclatl/KeyDef.h +20 -17
  267. data/source/global/tdclatl/KeySegment.cpp +13 -12
  268. data/source/global/tdclatl/PooledDbManager.cpp +223 -0
  269. data/source/global/tdclatl/PooledDbManager.h +76 -0
  270. data/source/global/tdclatl/QueryBase.cpp +206 -127
  271. data/source/global/tdclatl/QueryBase.h +55 -59
  272. data/source/global/tdclatl/Record.cpp +214 -0
  273. data/source/global/tdclatl/Record.h +96 -0
  274. data/source/global/tdclatl/Recordset.cpp +278 -0
  275. data/source/global/tdclatl/Recordset.h +83 -0
  276. data/source/global/tdclatl/RecordsetQuery.cpp +118 -0
  277. data/source/global/tdclatl/RecordsetQuery.h +126 -0
  278. data/source/global/tdclatl/Table.cpp +57 -60
  279. data/source/global/tdclatl/Table.h +32 -29
  280. data/source/global/tdclatl/TableDef.cpp +63 -62
  281. data/source/global/tdclatl/TableDef.h +20 -22
  282. data/source/global/tdclatl/TdVersion.cpp +3 -3
  283. data/source/global/tdclatl/TdVersion.h +15 -11
  284. data/source/global/tdclatl/_IDatabaseEvents_CP.h +99 -92
  285. data/source/global/tdclatl/activeTable.cpp +355 -0
  286. data/source/global/tdclatl/activeTable.h +79 -0
  287. data/source/global/tdclatl/dllmain.cpp +4 -3
  288. data/source/global/tdclatl/dllmain.h +7 -6
  289. data/source/global/tdclatl/keySegment.h +22 -18
  290. data/source/global/tdclatl/resource.h +0 -0
  291. data/source/global/tdclatl/stdafx.h +6 -4
  292. data/source/global/tdclatl/targetver.h +0 -1
  293. data/source/global/tdclatl/tdclatl.cpp +10 -5
  294. data/source/global/tdclatl/tdclatl.idl +530 -14
  295. data/source/linux/charsetConvert.h +78 -79
  296. data/source/linux/linuxTypes.h +9 -12
  297. data/source/linux/tchar.h +168 -166
  298. data/transactd.gemspec +24 -16
  299. metadata +98 -12
  300. data/bin/common/tdclc_32_1_2.dll +0 -0
  301. data/bin/common/tdclc_64_1_2.dll +0 -0
  302. data/build/tdclc/tdclc_32.cbproj +0 -173
  303. data/build/tdclcpp/tdclcpp_bcb_32.cbproj +0 -232
  304. data/build/tdclrb/GEM_VERSION +0 -3
  305. data/source/bzs/db/protocol/tdap/client/filter.cpp +0 -43
  306. data/source/bzs/example/useORM.cpp +0 -585
@@ -12,8 +12,8 @@
12
12
  GNU General Public License for more details.
13
13
 
14
14
  You should have received a copy of the GNU General Public License
15
- along with this program; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17
17
  02111-1307, USA.
18
18
  =================================================================*/
19
19
  #include "serverCpt.h"
@@ -23,7 +23,7 @@
23
23
  #include <boost/shared_ptr.hpp>
24
24
  #include <boost/scoped_array.hpp>
25
25
  #include <boost/thread.hpp>
26
- #include <boost/asio/write.hpp>
26
+ #include <boost/asio/write.hpp>
27
27
  #include <boost/thread/xtime.hpp>
28
28
  #include <algorithm>
29
29
  #include <boost/enable_shared_from_this.hpp>
@@ -35,15 +35,13 @@ using namespace boost;
35
35
  using namespace boost::asio;
36
36
  using namespace boost::asio::ip;
37
37
 
38
-
39
-
40
38
  namespace bzs
41
39
  {
42
40
  namespace netsvc
43
41
  {
44
42
  namespace server
45
43
  {
46
- namespace cpt //connection per thread
44
+ namespace cpt // connection per thread
47
45
  {
48
46
 
49
47
  unsigned int g_connections = 0;
@@ -54,295 +52,325 @@ unsigned int g_waitThread = 0;
54
52
  #define READBUF_SIZE 66000
55
53
  #define WRITEBUF_SIZE 66000
56
54
 
57
- class connection : public iconnection, private boost::noncopyable
55
+ class connection : public iconnection, private boost::noncopyable
58
56
  {
59
- mutable io_service m_ios;
60
-
61
- static mutex m_mutex;
62
- tcp::socket m_socket;
63
- std::vector<char> m_buffer;
64
- std::vector<char> m_result;
65
- buffers m_optionalBuffes;
66
- shared_ptr<IAppModule> m_module;
67
-
68
- size_t m_readLen;
69
- void handle_read(const boost::system::error_code& e, std::size_t bytes_transferred)
70
- {
71
- DEBUG_PROFILE_START(m_readLen==0)
72
- if (!e)
73
- {
74
- bool complete = false;
75
-
76
- if (bytes_transferred==0)
77
- return ;
78
- m_readLen += bytes_transferred;
79
- size_t n = m_module->onRead(&m_buffer[0], m_readLen, complete);
80
- if (complete)
81
- {
82
- DEBUG_PROFILE_END(1, "handle_read")
83
- size_t size=0;
84
- if (m_optionalBuffes.size())
85
- m_optionalBuffes.clear();
86
- if (m_module->execute(&m_result[0], size, &m_optionalBuffes) == EXECUTE_RESULT_QUIT)
87
- return ;
88
- else
89
- {
90
- m_readLen = 0;
91
- DEBUG_PROFILE_START(1)
92
- {
93
- if (m_optionalBuffes.size())
94
- {
95
- m_optionalBuffes.insert(m_optionalBuffes.begin(), buffer(&m_result[0], size));
96
- async_write(m_socket, m_optionalBuffes, boost::bind(&connection::handle_write, this,
97
- boost::asio::placeholders::error));
98
- }else
99
- {
100
- async_write(m_socket, buffer(&m_result[0], size), boost::bind(&connection::handle_write, this,
101
- boost::asio::placeholders::error));
102
- /*boost::asio::write(m_socket, buffer(&m_result[0], size), boost::asio::transfer_all());
103
- m_socket.async_read_some(buffer(&m_buffer[0], m_buffer.size()),
104
- boost::bind(&connection::handle_read, this,
105
- boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));*/
106
- }
107
- }
108
- m_module->cleanup();
109
- return;
110
- }
111
- }
112
-
113
- if (n > m_buffer.size())
114
- m_buffer.resize(n);
115
- m_socket.async_read_some(buffer(&m_buffer[m_readLen], m_buffer.size()-m_readLen),
116
- boost::bind(&connection::handle_read, this,
117
- boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
118
- }
119
- }
120
-
121
- void handle_write(const boost::system::error_code& e)
122
- {
123
- if (!e)
124
- {
125
-
126
- DEBUG_PROFILE_END(1, "write")
127
- m_socket.async_read_some(buffer(&m_buffer[0], m_buffer.size()),
128
- boost::bind(&connection::handle_read, this,
129
- boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
130
- }
131
-
132
- }
57
+ mutable io_service m_ios;
58
+
59
+ static mutex m_mutex;
60
+ tcp::socket m_socket;
61
+ vector_buffer m_buffer;
62
+ vector_buffer m_result;
63
+ buffers m_optionalBuffes;
64
+ shared_ptr<IAppModule> m_module;
65
+ bool m_segmentWrite;
66
+
67
+ size_t m_readLen;
68
+ void handle_read(const boost::system::error_code& e,
69
+ std::size_t bytes_transferred)
70
+ {
71
+ DEBUG_PROFILE_START(m_readLen == 0)
72
+ if (!e)
73
+ {
74
+ bool complete = false;
75
+
76
+ if (bytes_transferred == 0)
77
+ return;
78
+ m_readLen += bytes_transferred;
79
+ size_t n = m_module->onRead(&m_buffer[0], m_readLen, complete);
80
+ if (complete)
81
+ {
82
+ DEBUG_PROFILE_END(1, "handle_read")
83
+ size_t size = 0;
84
+ if (m_optionalBuffes.size())
85
+ m_optionalBuffes.clear();
86
+ vecBuffer vbuf(m_result);
87
+ bzs::netsvc::server::IResultBuffer& buf = vbuf;
88
+ if (m_module->execute(buf, size, &m_optionalBuffes) ==
89
+ EXECUTE_RESULT_QUIT)
90
+ return;
91
+ else
92
+ {
93
+ m_readLen = 0;
94
+ DEBUG_PROFILE_START(1)
95
+ {
96
+ if (m_optionalBuffes.size())
97
+ {
98
+ m_optionalBuffes.insert(m_optionalBuffes.begin(),
99
+ buffer(&m_result[0], size));
100
+ async_write(
101
+ m_socket, m_optionalBuffes,
102
+ boost::asio::transfer_all(),
103
+ boost::bind(&connection::handle_write, this,
104
+ boost::asio::placeholders::error));
105
+ }
106
+ else
107
+ {
108
+ async_write(
109
+ m_socket, buffer(&m_result[0], size),
110
+ boost::asio::transfer_all(),
111
+ boost::bind(&connection::handle_write, this,
112
+ boost::asio::placeholders::error));
113
+ }
114
+ }
115
+ m_module->cleanup();
116
+ return;
117
+ }
118
+ }
119
+
120
+ if (n > m_buffer.size())
121
+ m_buffer.resize(n);
122
+ async_read(
123
+ m_socket, buffer(&m_buffer[m_readLen], n - m_readLen),
124
+ boost::asio::transfer_all(),
125
+ boost::bind(&connection::handle_read, this,
126
+ boost::asio::placeholders::error,
127
+ boost::asio::placeholders::bytes_transferred));
128
+ }
129
+ }
130
+
131
+ void handle_write(const boost::system::error_code& e)
132
+ {
133
+ if (!e)
134
+ {
135
+ if (m_segmentWrite == false)
136
+ {
137
+ DEBUG_PROFILE_END(1, "write")
138
+ async_read(
139
+ m_socket, buffer(&m_buffer[0], 4),
140
+ boost::asio::transfer_all(),
141
+ boost::bind(&connection::handle_read, this,
142
+ boost::asio::placeholders::error,
143
+ boost::asio::placeholders::bytes_transferred));
144
+ }
145
+ }
146
+ }
147
+
133
148
  public:
134
-
135
- connection(): m_socket(m_ios)
136
- ,m_readLen(0)
137
- {
138
- m_buffer.resize(READBUF_SIZE);
139
- m_result.resize(WRITEBUF_SIZE);
140
- mutex::scoped_lock lck(m_mutex);
141
- connections.push_back(this);
142
- ++g_connections;
143
-
144
- }
145
-
146
- ~connection()
147
- {
148
-
149
- if (connections.size())
150
- {
151
- mutex::scoped_lock lck(m_mutex);
152
- std::vector<connection*>::iterator it = find(connections.begin(), connections.end(), this);
153
- if (it != connections.end())
154
- {
155
- connections.erase( it);
156
- --g_connections;
157
- }
158
- }
159
- }
160
-
161
- void close()
162
- {
163
- m_ios.post(boost::bind(&connection::doClose, this));
164
- }
165
-
166
- void doClose()
167
- {
168
- boost::system::error_code ec;
169
- m_socket.close(ec);
170
- }
171
-
172
- io_service& ios()const{return m_ios;};
173
-
174
- tcp::socket& socket(){return m_socket;}
175
-
176
- void setModule(boost::shared_ptr<IAppModule> p)
177
- {
178
- m_module = p;
179
- }
180
-
181
- void sendConnectAccept()
182
- {
183
- m_ios.reset();
184
- const boost::asio::ip::tcp::no_delay nodelay(true);
185
- m_socket.set_option(nodelay);
186
-
187
- size_t n = m_module->onAccept(&m_result[0], WRITEBUF_SIZE);
188
- if (n)
189
- boost::asio::write(m_socket, buffer(&m_result[0], n), boost::asio::transfer_all());
190
- }
191
-
192
- void start()
193
- {
194
- m_socket.async_read_some(buffer(&m_buffer[0], m_buffer.size()),
195
- boost::bind(&connection::handle_read, this,
196
- boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
197
- m_ios.run();
198
- }
199
-
200
- static std::vector<connection* > connections;
201
-
202
- static void stop()
203
- {
204
- mutex::scoped_lock lck(m_mutex);
205
- try
206
- {
207
- for (size_t i=0;i<connections.size();i++)
208
- connections[i]->ios().stop();
209
- }
210
- catch(boost::system::system_error &){};
211
- }
212
-
149
+ connection() : m_socket(m_ios), m_segmentWrite(false), m_readLen(0)
150
+ {
151
+ m_buffer.resize(READBUF_SIZE);
152
+ m_result.resize(WRITEBUF_SIZE);
153
+ mutex::scoped_lock lck(m_mutex);
154
+ connections.push_back(this);
155
+ ++g_connections;
156
+ }
157
+
158
+ ~connection()
159
+ {
160
+
161
+ if (connections.size())
162
+ {
163
+ mutex::scoped_lock lck(m_mutex);
164
+ std::vector<connection*>::iterator it =
165
+ find(connections.begin(), connections.end(), this);
166
+ if (it != connections.end())
167
+ {
168
+ connections.erase(it);
169
+ --g_connections;
170
+ }
171
+ }
172
+ }
173
+
174
+ void asyncWrite(const char* p, unsigned int size)
175
+ {
176
+ boost::asio::write(m_socket, buffer(p, size),
177
+ boost::asio::transfer_all());
178
+ }
179
+
180
+ void close() { m_ios.post(boost::bind(&connection::doClose, this)); }
181
+
182
+ void doClose()
183
+ {
184
+ boost::system::error_code ec;
185
+ m_socket.close(ec);
186
+ }
187
+
188
+ io_service& ios() const { return m_ios; };
189
+
190
+ tcp::socket& socket() { return m_socket; }
191
+
192
+ void setModule(boost::shared_ptr<IAppModule> p) { m_module = p; }
193
+
194
+ void sendConnectAccept()
195
+ {
196
+ m_ios.reset();
197
+ m_socket.set_option(boost::asio::ip::tcp::no_delay(true));
198
+ boost::system::error_code ec;
199
+ m_socket.set_option(
200
+ boost::asio::socket_base::receive_buffer_size(512 * 1024), ec);
201
+ m_socket.set_option(
202
+ boost::asio::socket_base::send_buffer_size(1024 * 1024 * 10), ec);
203
+
204
+ size_t n = m_module->onAccept(&m_result[0], WRITEBUF_SIZE);
205
+ if (n)
206
+ boost::asio::write(m_socket, buffer(&m_result[0], n),
207
+ boost::asio::transfer_all());
208
+ }
209
+
210
+ void start()
211
+ {
212
+ m_socket.async_read_some(
213
+ buffer(&m_buffer[0], m_buffer.size()),
214
+ boost::bind(&connection::handle_read, this,
215
+ boost::asio::placeholders::error,
216
+ boost::asio::placeholders::bytes_transferred));
217
+ m_ios.run();
218
+ }
219
+
220
+ static std::vector<connection*> connections;
221
+
222
+ static void stop()
223
+ {
224
+ mutex::scoped_lock lck(m_mutex);
225
+ try
226
+ {
227
+ for (size_t i = 0; i < connections.size(); i++)
228
+ connections[i]->ios().stop();
229
+ }
230
+ catch (boost::system::system_error&)
231
+ {
232
+ };
233
+ }
213
234
  };
214
- std::vector<connection* > connection::connections;
235
+ std::vector<connection*> connection::connections;
215
236
  mutex connection::m_mutex;
216
237
 
217
238
  // ---------------------------------------------------------------------------
218
239
  // worker
219
240
  // ---------------------------------------------------------------------------
220
241
 
221
- class worker : private boost::noncopyable
242
+ class worker : private boost::noncopyable
222
243
  {
223
244
 
224
- static boost::mutex m_mutex;
225
- static std::vector< shared_ptr<boost::thread> > m_threads;
226
- static std::vector<worker*> m_workers;
227
- static worker* findWaitThread()
228
- {
229
- mutex::scoped_lock lck(m_mutex);
230
- for (size_t i=0;i<m_workers.size();i++)
231
- if (m_workers[i]->m_connection==NULL)
232
- return m_workers[i];
233
- return NULL;
234
- }
235
-
236
- boost::shared_ptr<connection> m_connection;
237
-
238
- bool resume(){return shutdown || m_connection;}
239
-
240
- ~worker()
241
- {
242
- mutex::scoped_lock lck(m_mutex);
243
- m_workers.erase( find(m_workers.begin(), m_workers.end(), this));
244
- }
245
-
246
- public:
247
- static bool shutdown;
248
- static const char* hostCheckName;
249
- static boost::condition_variable condition;
250
-
251
- static void registThread(shared_ptr<boost::thread> t)
252
- {
253
- mutex::scoped_lock lck(m_mutex);
254
- m_threads.push_back(t);
255
- }
256
-
257
- static void join()
258
- {
259
- for (size_t i=0;i<m_threads.size();i++)
260
- m_threads[i]->join();
261
- //delete thread
262
- m_threads.erase(m_threads.begin(), m_threads.end());
263
- }
264
-
265
- static worker* get(const IAppModuleBuilder* app)
266
- {
267
- worker* p = findWaitThread();
268
- if (p==NULL)
269
- {
270
- boost::thread::attributes attr;
271
- attr.set_stack_size( 125 * 1024);
272
- p = new worker();
273
- shared_ptr<boost::thread> t(new boost::thread(attr, bind(&worker::run, p, app)));
274
- registThread(t);
275
- }
276
- return p;
277
- }
278
-
279
- worker()
280
- {
281
- mutex::scoped_lock lck(m_mutex);
282
- m_workers.push_back(this);
283
- }
284
-
285
- void setConnection(boost::shared_ptr<connection> conn)
286
- {
287
- m_connection = conn;
288
- }
289
-
290
- void run(const IAppModuleBuilder* app)
291
- {
292
- try
293
- {
294
- while (!shutdown)
295
- {
296
- if (m_connection)
297
- {
298
- boost::system::error_code ec;
299
- tcp::endpoint endpoint = m_connection->socket().remote_endpoint(ec);
300
- boost::shared_ptr<IAppModule> mod(((IAppModuleBuilder*)app)->createSessionModule(endpoint, m_connection.get(), SERVER_TYPE_CPT));
301
- m_connection->setModule(mod);
302
- if (mod->checkHost(hostCheckName))
303
- {
304
- m_connection->sendConnectAccept();
305
- m_connection->start(); //It does not return, unless a connection is close.
306
- }
307
- m_connection.reset();
308
- }
309
- //TODO A used thread -- it is all held.
310
- //The number of maintenance is decided and it is made not to hold any more.
311
- mutex::scoped_lock lck(m_mutex);
312
- ++g_waitThread;
313
- condition.wait(lck, bind(&worker::resume, this));
314
- --g_waitThread;
315
- }
316
- }
317
- catch(bzs::rtl::exception &e)
318
- {
319
- if (server::erh)
320
- {
321
- if(const std::string *msg = getMsg(e))
322
- {
323
- std::string s = "Cpt server " + *msg;
324
- server::erh->printError(s.c_str());
325
- }else
326
- server::erh->printError(boost::diagnostic_information(e).c_str());
327
- }
328
- }
329
- catch(...)
330
- {
331
- if (server::erh)
332
- server::erh->printError("Cpt server Unknown");
333
- }
334
- //An end of this thread will delete self.
335
- delete this;
336
- }
245
+ static boost::mutex m_mutex;
246
+ static std::vector<shared_ptr<boost::thread> > m_threads;
247
+ static std::vector<worker*> m_workers;
248
+ static worker* findWaitThread()
249
+ {
250
+ mutex::scoped_lock lck(m_mutex);
251
+ for (size_t i = 0; i < m_workers.size(); i++)
252
+ if (m_workers[i]->m_connection == NULL)
253
+ return m_workers[i];
254
+ return NULL;
255
+ }
256
+
257
+ boost::shared_ptr<connection> m_connection;
258
+
259
+ bool resume() { return shutdown || m_connection; }
260
+
261
+ ~worker()
262
+ {
263
+ mutex::scoped_lock lck(m_mutex);
264
+ m_workers.erase(find(m_workers.begin(), m_workers.end(), this));
265
+ }
337
266
 
267
+ public:
268
+ static bool shutdown;
269
+ static const char* hostCheckName;
270
+ static boost::condition_variable condition;
271
+
272
+ static void registThread(shared_ptr<boost::thread> t)
273
+ {
274
+ mutex::scoped_lock lck(m_mutex);
275
+ m_threads.push_back(t);
276
+ }
277
+
278
+ static void join()
279
+ {
280
+ for (size_t i = 0; i < m_threads.size(); i++)
281
+ m_threads[i]->join();
282
+ // delete thread
283
+ m_threads.erase(m_threads.begin(), m_threads.end());
284
+ }
285
+
286
+ static worker* get(const IAppModuleBuilder* app)
287
+ {
288
+ worker* p = findWaitThread();
289
+ if (p == NULL)
290
+ {
291
+ boost::thread::attributes attr;
292
+ attr.set_stack_size(125 * 1024);
293
+ p = new worker();
294
+ shared_ptr<boost::thread> t(
295
+ new boost::thread(attr, bind(&worker::run, p, app)));
296
+ registThread(t);
297
+ }
298
+ return p;
299
+ }
300
+
301
+ worker()
302
+ {
303
+ mutex::scoped_lock lck(m_mutex);
304
+ m_workers.push_back(this);
305
+ }
306
+
307
+ void setConnection(boost::shared_ptr<connection> conn)
308
+ {
309
+ m_connection = conn;
310
+ }
311
+
312
+ void run(const IAppModuleBuilder* app)
313
+ {
314
+ try
315
+ {
316
+ while (!shutdown)
317
+ {
318
+ if (m_connection)
319
+ {
320
+ boost::system::error_code ec;
321
+ tcp::endpoint endpoint =
322
+ m_connection->socket().remote_endpoint(ec);
323
+ boost::shared_ptr<IAppModule> mod(
324
+ ((IAppModuleBuilder*)app)->createSessionModule(
325
+ endpoint, m_connection.get(), SERVER_TYPE_CPT));
326
+ m_connection->setModule(mod);
327
+ if (mod->checkHost(hostCheckName))
328
+ {
329
+ m_connection->sendConnectAccept();
330
+ m_connection->start(); // It does not return, unless a
331
+ // connection is close.
332
+ }
333
+ m_connection.reset();
334
+ }
335
+ // TODO A used thread -- it is all held.
336
+ // The number of maintenance is decided and it is made not to
337
+ // hold any more.
338
+ mutex::scoped_lock lck(m_mutex);
339
+ ++g_waitThread;
340
+ condition.wait(lck, bind(&worker::resume, this));
341
+ --g_waitThread;
342
+ }
343
+ }
344
+ catch (bzs::rtl::exception& e)
345
+ {
346
+ if (server::erh)
347
+ {
348
+ if (const std::string* msg = getMsg(e))
349
+ {
350
+ std::string s = "Cpt server " + *msg;
351
+ server::erh->printError(s.c_str());
352
+ }
353
+ else
354
+ server::erh->printError(
355
+ boost::diagnostic_information(e).c_str());
356
+ }
357
+ }
358
+ catch (...)
359
+ {
360
+ if (server::erh)
361
+ server::erh->printError("Cpt server Unknown");
362
+ }
363
+ // An end of this thread will delete self.
364
+ delete this;
365
+ }
338
366
  };
339
367
 
340
368
  bool worker::shutdown = false;
341
369
  const char* worker::hostCheckName;
342
370
  boost::condition_variable worker::condition;
343
- boost::mutex worker::m_mutex;
344
- std::vector< boost::shared_ptr<boost::thread> > worker::m_threads;
345
- std::vector<worker*> worker::m_workers;
371
+ boost::mutex worker::m_mutex;
372
+ std::vector<boost::shared_ptr<boost::thread> > worker::m_threads;
373
+ std::vector<worker*> worker::m_workers;
346
374
 
347
375
  // ---------------------------------------------------------------------------
348
376
  // listener
@@ -350,103 +378,107 @@ std::vector<worker*> worker::m_workers;
350
378
 
351
379
  class listener
352
380
  {
353
- boost::shared_ptr<IAppModuleBuilder> m_app;
354
- boost::asio::ip::tcp::acceptor m_acceptor;
355
- boost::shared_ptr<connection> m_newConnection;
356
- server* m_srv;
381
+ boost::shared_ptr<IAppModuleBuilder> m_app;
382
+ boost::asio::ip::tcp::acceptor m_acceptor;
383
+ boost::shared_ptr<connection> m_newConnection;
384
+ server* m_srv;
385
+
357
386
  public:
358
- listener(server* srv,
359
- shared_ptr<IAppModuleBuilder> app, const std::string& address, const std::string& port)
360
- :m_srv(srv), m_app(app),m_acceptor(srv->ios())
361
- {
362
-
363
- m_newConnection.reset(new connection());
364
- tcp::resolver resolver(m_newConnection->ios());
365
- tcp::resolver::query query(address, port, resolver_query_base::numeric_service);
366
- tcp::endpoint endpoint = *resolver.resolve(query);
367
-
368
- m_acceptor.open(endpoint.protocol());
369
- m_acceptor.set_option(tcp::acceptor::reuse_address(true));
370
- m_acceptor.bind(endpoint);
371
- m_acceptor.listen((int)m_srv->maxConnections());
372
- }
373
-
374
- void startAsyncAccept()
375
- {
376
- if (m_srv->checkConnections())
377
- m_acceptor.async_accept(m_newConnection->socket(), boost::bind(&listener::onAccept, this, placeholders::error));
378
- }
379
-
380
- void onAccept(const boost::system::error_code& e)
381
- {
382
- //connection is passed to a thread and it resumes.
383
- if (!e)
384
- {
385
- worker* w = worker::get(m_app.get());
386
- w->setConnection(m_newConnection);
387
- worker::condition.notify_all();
388
- m_newConnection.reset(new connection());
389
- startAsyncAccept();
390
- }
391
- }
392
-
393
- void cancel()
394
- {
395
- boost::system::error_code ec;
396
- m_acceptor.cancel(ec);
397
- }
387
+ listener(server* srv, shared_ptr<IAppModuleBuilder> app,
388
+ const std::string& address, const std::string& port)
389
+ : m_app(app), m_acceptor(srv->ios()), m_srv(srv)
390
+ {
391
+
392
+ m_newConnection.reset(new connection());
393
+ tcp::resolver resolver(m_newConnection->ios());
394
+ tcp::resolver::query query(address, port,
395
+ resolver_query_base::numeric_service);
396
+ tcp::endpoint endpoint = *resolver.resolve(query);
397
+
398
+ m_acceptor.open(endpoint.protocol());
399
+ m_acceptor.set_option(tcp::acceptor::reuse_address(true));
400
+ m_acceptor.bind(endpoint);
401
+ m_acceptor.listen((int)m_srv->maxConnections());
402
+ }
403
+
404
+ void startAsyncAccept()
405
+ {
406
+ if (m_srv->checkConnections())
407
+ m_acceptor.async_accept(
408
+ m_newConnection->socket(),
409
+ boost::bind(&listener::onAccept, this, placeholders::error));
410
+ }
411
+
412
+ void onAccept(const boost::system::error_code& e)
413
+ {
414
+ // connection is passed to a thread and it resumes.
415
+ if (!e)
416
+ {
417
+ worker* w = worker::get(m_app.get());
418
+ w->setConnection(m_newConnection);
419
+ worker::condition.notify_all();
420
+ m_newConnection.reset(new connection());
421
+ startAsyncAccept();
422
+ }
423
+ }
424
+
425
+ void cancel()
426
+ {
427
+ boost::system::error_code ec;
428
+ m_acceptor.cancel(ec);
429
+ }
398
430
  };
399
431
 
400
-
401
432
  // ---------------------------------------------------------------------------
402
433
  // server
403
434
  // ---------------------------------------------------------------------------
404
- inotifyHandler* server::erh=NULL;
435
+ inotifyHandler* server::erh = NULL;
405
436
 
406
437
  /** server
407
- * If it starts, a server will create the exclusive thread for accpter
408
- * and will go into an infinite loop.
438
+ * If it starts, a server will create the exclusive thread for accpter
439
+ * and will go into an infinite loop.
409
440
  */
410
441
  server::server(std::size_t max_connections, const char* hostCheckName)
411
- : m_maxConnections(max_connections) ,m_timer(m_ios),m_stopped(false)
442
+ : m_timer(m_ios), m_maxConnections(max_connections), m_stopped(false)
412
443
  {
413
- worker::hostCheckName = hostCheckName;
444
+ worker::hostCheckName = hostCheckName;
414
445
  }
415
446
 
416
447
  server::~server()
417
448
  {
418
- m_listeners.clear();
449
+ m_listeners.clear();
419
450
  }
420
451
 
421
- void server::addApplication(boost::shared_ptr<IAppModuleBuilder> app, const std::string& address
422
- , const std::string& port)
452
+ void server::addApplication(boost::shared_ptr<IAppModuleBuilder> app,
453
+ const std::string& address, const std::string& port)
423
454
  {
424
- m_listeners.push_back(boost::shared_ptr<listener>(new listener(this, app, address, port)));
455
+ m_listeners.push_back(
456
+ boost::shared_ptr<listener>(new listener(this, app, address, port)));
425
457
  }
426
458
 
427
459
  /** Start the server
428
460
  */
429
461
  void server::start()
430
462
  {
431
- shared_ptr<boost::thread> t(new boost::thread(bind(&server::run, this)));
432
- worker::registThread(t);
463
+ shared_ptr<boost::thread> t(new boost::thread(bind(&server::run, this)));
464
+ worker::registThread(t);
433
465
  }
434
466
 
435
467
  bool server::checkConnections()
436
468
  {
437
- while (connection::connections.size() > m_maxConnections)
438
- {
439
- Sleep(100*MCRTOMM);
440
- if (m_stopped)
441
- return false;
442
- }
443
- return true;
469
+ while (connection::connections.size() > m_maxConnections)
470
+ {
471
+ Sleep(100 * MCRTOMM);
472
+ if (m_stopped)
473
+ return false;
474
+ }
475
+ return true;
444
476
  }
445
477
 
446
478
  void server::startAsyncAccept()
447
479
  {
448
- for (size_t i = 0;i < m_listeners.size();i++)
449
- m_listeners[i]->startAsyncAccept();
480
+ for (size_t i = 0; i < m_listeners.size(); i++)
481
+ m_listeners[i]->startAsyncAccept();
450
482
  }
451
483
 
452
484
  /** Strat the time.
@@ -454,69 +486,67 @@ void server::startAsyncAccept()
454
486
  */
455
487
  void server::startTimer()
456
488
  {
457
- m_timer.expires_from_now(posix_time::seconds(10));
458
- m_timer.async_wait(bind(&server::onCheckInternlShutdown, this, placeholders::error));
459
-
489
+ m_timer.expires_from_now(posix_time::seconds(10));
490
+ m_timer.async_wait(
491
+ bind(&server::onCheckInternlShutdown, this, placeholders::error));
460
492
  }
461
493
 
462
494
  void server::run()
463
495
  {
464
- if (erh)
465
- erh->printInfo("Start Cpt server.");
466
-
467
- startAsyncAccept();
468
- startTimer();
469
- m_ios.run();
496
+ if (erh)
497
+ erh->printInfo("Start Cpt server.");
498
+
499
+ startAsyncAccept();
500
+ startTimer();
501
+ m_ios.run();
470
502
  }
471
503
 
472
504
  void server::onCheckInternlShutdown(const boost::system::error_code& e)
473
505
  {
474
- bool shutdown = false;
475
- {
476
- mutex::scoped_lock lck(modulesMutex);
477
- for (size_t i=0;i<modules.size();i++)
478
- {
479
- IAppModule* mod = modules[i];
480
- if (mod->isShutDown())
481
- {
482
- shutdown = true;
483
- break;
484
- }
485
- }
486
- }
487
-
488
- if (shutdown)
489
- doStop();
490
- else
491
- startTimer();
506
+ bool shutdown = false;
507
+ {
508
+ mutex::scoped_lock lck(modulesMutex);
509
+ for (size_t i = 0; i < modules.size(); i++)
510
+ {
511
+ IAppModule* mod = modules[i];
512
+ if (mod->isShutDown())
513
+ {
514
+ shutdown = true;
515
+ break;
516
+ }
517
+ }
518
+ }
519
+
520
+ if (shutdown)
521
+ doStop();
522
+ else
523
+ startTimer();
492
524
  }
493
525
 
494
526
  void server::doStop()
495
527
  {
496
- if (!m_stopped)
497
- {
498
- m_stopped = true;
499
- if (erh)
500
- erh->printInfo("Stopping Cpt server ...");
501
-
502
- for (size_t i = 0;i < m_listeners.size();i++)
503
- m_listeners[i]->cancel();
504
- worker::shutdown = true;
505
- connection::stop();
506
- m_ios.stop();
507
- worker::condition.notify_all();
508
- }
528
+ if (!m_stopped)
529
+ {
530
+ m_stopped = true;
531
+ if (erh)
532
+ erh->printInfo("Stopping Cpt server ...");
533
+
534
+ for (size_t i = 0; i < m_listeners.size(); i++)
535
+ m_listeners[i]->cancel();
536
+ worker::shutdown = true;
537
+ connection::stop();
538
+ m_ios.stop();
539
+ worker::condition.notify_all();
540
+ }
509
541
  }
510
542
 
511
543
  void server::stop()
512
544
  {
513
- doStop();
514
- worker::join();
515
-
545
+ doStop();
546
+ worker::join();
516
547
  }
517
548
 
518
-
519
- }//namespace cpt
520
- }//namespace server
521
- }//namesapce netsvc
522
- }//namespace bzs
549
+ } // namespace cpt
550
+ } // namespace server
551
+ } // namesapce netsvc
552
+ } // namespace bzs