- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/HRPRPCPlugin.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2008-2018 by TOPPERS Project 7 7 #-- 8 # ä¸è¨èä½æ¨©è 9 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 10 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 11 # å¤ã»åé 12 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 13 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 14 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 15 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 16 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 17 # ç¨ã§ããå½¢ã§åé 18 å¸ããå ´åã«ã¯ï¼åé 19 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 20 # è 21 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 22 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 23 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 24 # ç¨ã§ããªãå½¢ã§åé 25 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 26 # ã¨ï¼ 27 # (a) åé 28 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 30 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 # (b) åé 32 å¸ã®å½¢æ 33 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 34 # å ±åãããã¨ï¼ 35 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 36 # 害ãããï¼ä¸è¨èä½æ¨©è 37 ããã³TOPPERSããã¸ã§ã¯ããå 38 責ãããã¨ï¼ 39 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 40 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 41 ããã³TOPPERSããã¸ã§ã¯ãã 42 # å 43 責ãããã¨ï¼ 8 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 9 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 10 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 11 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 12 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 13 # スコード中に含まれていること. 14 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 15 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 16 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 17 # の無保証規定を掲載すること. 18 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 19 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 20 # と. 21 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 24 # 報告すること. 25 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 26 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 27 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 28 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 29 # 免責すること. 44 30 # 45 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 # ã®è²¬ä»»ãè² ããªãï¼ 31 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 # の責任を負わない. 51 36 # 52 37 # $Id$ … … 56 41 require_tecsgen_lib "lib/GenParamCopy.rb" 57 42 58 #= HRPRPCPlugin ãã©ã°ã¤ã³59 # ã¹ã«ã¼ãã©ã°ã¤ã³(through)60 # ã»OpaqueMarshalerPlugin ã使ç¨ãã¦ãã¼ã·ã£ã©ã»ã«ã¿ã¤ããçæãã61 # ã»ãã¼ã·ã£ã©ãTDRããã£ã³ãã«ãã¡ãã»ã¼ã¸ãããã¡ãçæãã43 #= HRPRPCPlugin プラグイン 44 # スループラグイン (through) 45 # ・OpaqueMarshalerPlugin を使用してマーシャラセルタイプを生成する 46 # ・マーシャラ、TDR、チャンネル、メッセージバッファを生成する 62 47 # 63 48 class HRPRPCPlugin < ThroughPlugin … … 66 51 include GenParamCopy 67 52 68 # RPCPlugin å°ç¨ã®ãªãã·ã§ã³ 69 HRPRPCPluginArgProc = RPCPluginArgProc.dup # è¤è£½ãä½ã£ã¦å 70 ãå¤æ´ããªãããã«ãã 53 # RPCPlugin 専用のオプション 54 HRPRPCPluginArgProc = RPCPluginArgProc.dup # 複製を作って元を変更しないようにする 71 55 HRPRPCPluginArgProc[ "noClientSemaphore" ] = Proc.new { |obj,rhs| obj.set_noClientSemaphore rhs } 72 56 HRPRPCPluginArgProc[ "semaphoreCelltype" ] = Proc.new { |obj,rhs| obj.set_semaphoreCelltype rhs } 73 57 @@isFirstInstance = true 74 58 75 #=== RPCPlugin ã® initialize 76 # 説æ㯠ThroughPlugin (plugin.rb) ãåç 77 § 59 #=== RPCPlugin の initialize 60 # 説明は ThroughPlugin (plugin.rb) を参照 78 61 def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell ) 79 62 super … … 82 65 initialize_opaque_marshaler 83 66 84 # ãªãã·ã§ã³ï¼GenOpaqueMarshaler åç 85 § 67 # オプション:GenOpaqueMarshaler 参照 86 68 @plugin_arg_check_proc_tab = HRPRPCPluginArgProc 87 69 parse_plugin_arg … … 99 81 if @PPAllocatorSize == nil then 100 82 cdl_error( "HRP9999 PPAllocatorSize must be speicified for pointer argments" ) 101 # @PPAllocatorSize = 0 # 仮㫠0 ã¨ãã¦ãã (cdl ã®æ§æã¨ã©ã¼ãé¿ãããã)83 # @PPAllocatorSize = 0 # 仮に 0 としておく (cdl の構文エラーを避けるため) 102 84 end 103 85 elsif @PPAllocatorSize then … … 109 91 # if func_decl.get_type.is_oneway? then 110 92 # if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then 111 # cdl_error( "array of string not supported for oneway function in Transparent RPC" ) # mikan æååã®é 112 å 93 # cdl_error( "array of string not supported for oneway function in Transparent RPC" ) # mikan 文字列の配列 113 94 # elsif param_decl.get_string == -1 then 114 # cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" ) # mikan é·ãæªæå®æåå95 # cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" ) # mikan 長さ未指定文字列 115 96 # end 116 97 # end … … 118 99 119 100 # 120 # tecsgen/tecs/rpcã«includeãã¹ãéã 121 # #include "tecs_rpc.h" ãå®ç¾ããããã«å¿ 122 è¦ 123 # 大山:åé¤ Makefile.tecsgen ã« vpath, INCLUDES ãå 124 ¥ããã®ã¯ããããªãèã 125 # TECSGEN.add_search_path 㧠Makefile_templ ã«å 126 ¥ããã®ããã 101 # tecsgen/tecs/rpcにincludeパスを通す 102 # #include "tecs_rpc.h" を実現するために必要 103 # 大山:削除 Makefile.tecsgen に vpath, INCLUDES を入れるのは、よくない考え 104 # TECSGEN.add_search_path で Makefile_templ に入れるのがよい 127 105 # if @@isFirstInstance 128 106 # f = AppFile.open( "#{$gen}/Makefile.tecsgen" ) … … 134 112 end 135 113 136 #=== plugin ã®å®£è¨ã³ã¼ã (celltype ã®å®ç¾©) çæ114 #=== plugin の宣言コード (celltype の定義) 生成 137 115 def gen_plugin_decl_code( file ) 138 116 139 117 ct_name = "#{@ct_name}_#{@channelCelltype}" 140 118 141 # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼119 # このセルタイプ(同じシグニチャ)は既に生成されているか? 142 120 if @@generated_celltype[ ct_name ] == nil then 143 121 @@generated_celltype[ ct_name ] = [ self ] … … 148 126 149 127 f = CFile.open( @rpc_channel_celltype_file_name, "w" ) 150 # åãå 151 容ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯) 128 # 同じ内容を二度書く可能性あり (AppFile は不可) 152 129 153 130 f.print <<EOT … … 177 154 end 178 155 179 #=== through cell ã³ã¼ããçæ156 #=== through cell コードを生成 180 157 # 181 158 # … … 229 206 EOT 230 207 231 ##### ã¯ã©ã¤ã¢ã³ãå´ã®ã»ã«ã®çæ#####208 ##### クライアント側のセルの生成 ##### 232 209 nest = @start_region.gen_region_str_pre file 233 210 nest_str = " " * nest 234 211 235 # ã»ããã©ã®çæ212 # セマフォの生成 236 213 if @b_noClientSemaphore == false then 237 214 file.print <<EOT … … 243 220 end 244 221 245 # ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (tMessageBufferCEP)ã®çæ 246 # ãã£ã³ãã«ã¯å¿ 247 ããªã¼ã¸ã§ã³ä¸ã«ããã®ã§ã '::' ã§ã¤ãªã (ã§ãªããã°ãã«ã¼ããªã¼ã¸ã§ã³ã«ãªãããã§ãã¯ãå¿ 248 è¦ï¼ 222 # クライアント側チャンネル (tMessageBufferCEP)の生成 223 # チャンネルは必ずリージョン下にあるので、 '::' でつなぐ (でなければ、ルートリージョンにないかチェックが必要) 249 224 250 225 file.print <<EOT … … 263 238 EOT 264 239 265 # ã»ããã©ã®çµåæ240 # セマフォの結合文 266 241 if @b_noClientSemaphore == false then 267 242 semaphore = "#{nest_str} cLockChannel = #{@serverChannelCell}_Semaphore.eSemaphore;\n" … … 270 245 end 271 246 272 ### ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ###247 ### クライアント側チャンネル (マーシャラ+TDR)の生成 ### 273 248 cell = @next_cell 274 # ã¢ãã±ã¼ã¿ã®æå®ããããï¼249 # アロケータの指定があるか? 275 250 if cell.get_allocator_list.length > 0 then 276 251 … … 288 263 289 264 file.print delim 290 delim = ",\n" # æçµè¡ã«ã¯åºããªã 291 292 if subsc then # é 293 åæ·»æ° 265 delim = ",\n" # 最終行には出さない 266 267 if subsc then # 配列添数 294 268 subsc_str = '[#{subsc}]' 295 269 else … … 297 271 end 298 272 299 eport = "eThroughEntry" #RPC ã®åãå£åã«å¤æ´273 eport = "eThroughEntry" #RPCの受け口名に変更 300 274 file.print nest_str 301 275 file.print "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}" … … 316 290 #{clientErrorHandler_str}#{semaphore}#{nest_str} }; 317 291 EOT 318 ### END: ã¯ã©ã¤ã¢ã³ãå´ãã£ã³ãã« (ãã¼ã·ã£ã©+TDR)ã®çæ###292 ### END: クライアント側チャンネル (マーシャラ+TDR)の生成 ### 319 293 @start_region.gen_region_str_post file 320 294 file.print "\n\n" 321 295 322 ##### ãµã¼ãã¼å´ã®ã»ã«ã®çæ#####296 ##### サーバー側のセルの生成 ##### 323 297 nest = @end_region.gen_region_str_pre file 324 298 nest_str = " " * nest … … 336 310 end 337 311 338 # ãµã¼ãã¼å´ãã£ã³ãã«(tMessageBufferCEP)312 # サーバー側チャンネル (tMessageBufferCEP) 339 313 if @PPAllocatorSize then 340 314 alloc_cell =<<EOT … … 358 332 EOT 359 333 360 # ãµã¼ãã¼å´TDR334 # サーバー側TDR 361 335 file.print <<EOT 362 336 … … 373 347 end 374 348 375 # ãµã¼ãã¼å´ãã£ã³ãã« (ã¢ã³ãã¼ã·ã£ã©)349 # サーバー側チャンネル (アンマーシャラ) 376 350 file.print <<EOT 377 351 #{alloc_cell} … … 383 357 EOT 384 358 385 # ãµã¼ãã¼å´ã¿ã¹ã¯ã¡ã¤ã³359 # サーバー側タスクメイン 386 360 file.print <<EOT 387 361 … … 392 366 EOT 393 367 394 # ãµã¼ãã¼å´ã¿ã¹ã¯368 # サーバー側タスク 395 369 file.print <<EOT 396 370 … … 407 381 408 382 409 #=== ãã©ã°ã¤ã³å¼æ° noClientSemaphore ã®ãã§ãã¯383 #=== プラグイン引数 noClientSemaphore のチェック 410 384 def set_noClientSemaphore rhs 411 385 rhs = rhs.to_sym … … 419 393 end 420 394 421 #=== ãã©ã°ã¤ã³å¼æ° semaphoreCelltype ã®ãã§ãã¯395 #=== プラグイン引数 semaphoreCelltype のチェック 422 396 def set_semaphoreCelltype rhs 423 397 @semaphoreCelltype = rhs.to_sym … … 429 403 end 430 404 431 #=== NamespacePath ãå¾ã432 # çæããã»ã«ã® namespace path ãçæãã405 #=== NamespacePath を得る 406 # 生成するセルの namespace path を生成する 433 407 def get_cell_namespace_path 434 408 # nsp = @region.get_namespace.get_namespace_path -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.