tcllib websocket:如何将收到的消息打印到文本小部件

tcllib websocket: How to print received messages to a text widget

这是我的代码的重要部分:

set message_initialization_result ""

proc logMessage {msg} {
    upvar outputtext outputtext

    if { [string length $outputtext] > 0 } {
        if { [string length $msg] > 0 } {
            $outputtext insert end $msg
            $outputtext insert end "\n\n"
        }
    }
}

proc handler { sock type msg } {
    upvar outputtext outputtext
    upvar message_initialization_result message_initialization_result

    if {[catch {
    switch -glob -nocase -- $type {
    co* {
        logMessage "Connected on $sock"
    }
    te* {
        logMessage "Received:\n$msg"
    }
    cl* -
    dis* {
        logMessage "Disconnected"
    }
    }
    }]} {
        set message_initialization_result "$message_initialization_result handler"
    }
}

set sock [::websocket::open ws://127.0.0.1:10010 handler]

...
logMessage $message_initialization_result

outputtext 是一个包含文本小部件的变量。

如何让处理程序将收到的消息打印到该文本小部件? 我如何检查这个处理程序是否被调用了?我尝试引发错误,但似乎它们都被 websocket 库中的 catch 捕获。

我正在为后代收集一些积分...

  • 对于快速调试,将命令 puts [info level 0] 添加到您要跟踪的那些过程的开头。通过这种方式,您可以在每次调用过程时看到它收到的参数。
  • 如果您在基于 Tk 的脚本中没有控制台(例如 Windows),因此无法看到 puts 的输出,请尝试打开 Tk 控制台console show.
  • 如果无法获得上述输出,请尝试将输出发送到文件。如果可以使用 fileutil,命令 ::fileutil::appendToFile log.txt $msg 非常适合轻型日志记录。查看命令的选项。
  • 没有fileutil?尝试 set f [open log.txt a] ; puts $f $msg ; close $f。每次打开和关闭文件都会刷新它,这意味着您不需要那么多的侵入式注入和同步。

文档: close, console, fileutil (package), info, open, puts, set