# 所有代码如下
# 使用调试代码生成消息流程图如下:
# 0x01 0x02 0x03 0x04
# |msg01yryryryryr|
# 01 |-------------->|
# | | msg02 |
# 02 | |-------------->|
# | | | msg04 |
# 03 | | |-------------->|
# | | | msg05sdgfdsg |
# 04 | | |<--------------|
# | | msg06 | |
# 05 | |<--------------| |
# | msg07 | | |
# 06 |<--------------| | |
# | | | msg08eterte |
# 07 |<--------------|---------------|---------------|
# | | | msg09 |
# 08 | |<--------------|---------------|
# | | | msg10 |
# 09 | | |<--------------|
# | | msg11dsgdsg | |
# 10 |---------------|-------------->| |
# | | | msg12 |
# 11 |---------------|---------------|-------------->|
# | | | msg13 |
# 12 | |---------------|-------------->|
# | | | msg14 |
# 13 | | |-------------->|
# | | msg15 | |
# 14 | |<--------------| |
# | | msg16 | |
# 15 |<--------------|---------------| |
# | msg17sgsgdgd | | |
# 16 |<--------------| | |
namespace eval MsgTextFlow {
# moudle1 moudle2 moudle3
# head msgid sp1 | msgname | |
# |----------------->| |
# -1--|-2---|-3--|-------4----------|
# -----5-----|-6-|-6|-----7-----|-8-|-8-|
# |--9-|--10--|--9---|
set iFlow(L01) 4
set iFlow(L02) 2
set iFlow(L03) 2
set iFlow(L04) 16
set iFlow(FlowCT) ""
set iFlow(FlowMD) ""
set iFlow(SpLine) [string repeat " " 200]
set iFlow(HLine) "|"
set iFlow(HLen) [string length $iFlow(HLine)]
}
proc MsgTextFlow::AddMsgToFlow {moudle1 moudle2 msgname {msgid ""}} {
variable iFlow
# 加入模块
if {[lsearch $iFlow(FlowMD) $moudle1]==-1} {
lappend iFlow(FlowMD) $moudle1
}
if {[lsearch $iFlow(FlowMD) $moudle2]==-1} {
lappend iFlow(FlowMD) $moudle2
}
set Flowct [FormFlowMsgName $moudle1 $moudle2 $msgname]
lappend iFlow(FlowCT) $Flowct
set Flowct [FormFlowMsgDirec $moudle1 $moudle2 $msgid]
lappend iFlow(FlowCT) $Flowct
return $iFlow(FlowCT)
}
proc MsgTextFlow::FormFlowMsgDirec {moudle1 moudle2 {msgid ""}} {
variable iFlow
set tmptext ""
set mdulist $iFlow(FlowMD)
set mdulen [llength $mdulist]
set index1 [lsearch $mdulist $moudle1]
set index2 [lsearch $mdulist $moudle2]
# 消息名称放置在后面模块位置
set maxindex $index2
set minindex $index1
set msgdirec ">"
if {$index1>$index2} {
set maxindex $index1
set minindex $index2
set msgdirec "<"
}
if {$msgid!=""} {
set msgid [format [join "%0$iFlow(L02) d" ""] $msgid]
}
set start $iFlow(L01)
set tmptext [ReplaceTextLine $tmptext $start $msgid]
set basestart [expr $iFlow(L01)+$iFlow(L02)+$iFlow(L03)-1]
for {set i 0} {$i<$mdulen} {incr i} {
set start [expr $basestart+$iFlow(L04)*$i]
set tmptext [ReplaceTextLine $tmptext $start $iFlow(HLine)]
# --
if {$i<$maxindex&&$i>=$minindex} {
set start [expr $basestart+$iFlow(HLen)+$iFlow(L04)*$i]
set str [string repeat "-" $iFlow(L04)]
set tmptext [ReplaceTextLine $tmptext $start $str]
}
# fangxiang
if {$i==[expr $maxindex-1]&&$index2>$index1} {
set start [expr $basestart+$iFlow(L04)*($i+1)-1]
set tmptext [ReplaceTextLine $tmptext $start $msgdirec]
}
if {$i==$minindex&&$index2<$index1} {
set start [expr $basestart+$iFlow(L04)*($i)+1]
set tmptext [ReplaceTextLine $tmptext $start $msgdirec]
}
}
return $tmptext
}
proc MsgTextFlow::FormFlowMsgName {moudle1 moudle2 msgname} {
variable iFlow
set tmptext ""
set mdulist $iFlow(FlowMD)
set mdulen [llength $mdulist]
set index1 [lsearch $mdulist $moudle1]
set index2 [lsearch $mdulist $moudle2]
# 消息名称放置在后面模块位置
set maxindex $index2
if {$index1>$index2} {
set maxindex $index1
}
set basestart [expr $iFlow(L01)+$iFlow(L02)+$iFlow(L03)-1]
for {set i 0} {$i<$mdulen} {incr i} {
set start [expr $basestart+$iFlow(L04)*$i]
set tmptext [ReplaceTextLine $tmptext $start $iFlow(HLine)]
if {$i==[expr $maxindex-1]} {
set msglen [string length $msgname]
set start [expr $basestart+$iFlow(HLen)+$iFlow(L04)*$i+($iFlow(L04)-$msglen)/2]
set tmptext [ReplaceTextLine $tmptext $start $msgname]
}
}
return $tmptext
}
proc MsgTextFlow::FormFlowMoudle {} {
variable iFlow
set tmptext ""
set mdulist $iFlow(FlowMD)
set mdulen [llength $mdulist]
for {set i 0} {$i<$mdulen} {incr i} {
set mdu [lindex $mdulist $i]
set L06 [string length $mdu]
set start [expr $iFlow(L01)+$iFlow(L02)+$iFlow(L03)+$iFlow(HLen)+$iFlow(L04)*$i-$L06/2-1]
set tmptext [ReplaceTextLine $tmptext $start $mdu]
}
return $tmptext
}
proc MsgTextFlow::ReplaceTextLine {textline start newtext} {
variable iFlow
set newlen [string length $newtext]
set tlen [expr $start+$newlen]
set textline [format [join "%-$tlen s" ""] $textline]
set textline [string replace $textline $start [expr $tlen-1] $newtext]
set textline [string trimright $textline]
# if { [info level -1]=="FormFlowMsgDirec 0x02 0x03 2"} {
# puts [info level 0]
# puts "=$textline="
# }
return $textline
}
proc MsgTextFlow::PrintTextFlow {} {
variable iFlow
set title [MsgTextFlow::FormFlowMoudle]
set Flowct [join $iFlow(FlowCT) "\n"]
set Flowct "$title\n$Flowct"
#puts $Flowct
return $Flowct
}
# 调试调用代码
# -------------------------------------------------------
MsgTextFlow::AddMsgToFlow 0x01 0x02 msg01yryryryryr 1
MsgTextFlow::AddMsgToFlow 0x02 0x03 msg02 2
MsgTextFlow::AddMsgToFlow 0x03 0x04 msg04 3
MsgTextFlow::AddMsgToFlow 0x04 0x03 msg05sdgfdsg 4
MsgTextFlow::AddMsgToFlow 0x03 0x02 msg06 5
MsgTextFlow::AddMsgToFlow 0x02 0x01 msg07 6
MsgTextFlow::AddMsgToFlow 0x04 0x01 msg08eterte 7
MsgTextFlow::AddMsgToFlow 0x04 0x02 msg09 8
MsgTextFlow::AddMsgToFlow 0x04 0x03 msg10 9
MsgTextFlow::AddMsgToFlow 0x01 0x03 msg11dsgdsg 10
MsgTextFlow::AddMsgToFlow 0x01 0x04 msg12 11
MsgTextFlow::AddMsgToFlow 0x02 0x04 msg13 12
MsgTextFlow::AddMsgToFlow 0x03 0x04 msg14 13
MsgTextFlow::AddMsgToFlow 0x03 0x02 msg15 14
MsgTextFlow::AddMsgToFlow 0x03 0x01 msg16 15
MsgTextFlow::AddMsgToFlow 0x02 0x01 msg17sgsgdgd 16
MsgTextFlow::PrintTextFlow
# -------------------------------------------------------

我的日志
本文链接地址:http://lostCity.blog.zj.com/blog/d-198004.html
上一篇:不眠夜
下一篇:无
文章评论 共0条回复


TAG:
评分(