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

时间:2016-08-10 10:01:37

标签: websocket tcl tk

以下是我的代码的重要部分:

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捕获。

1 个答案:

答案 0 :(得分:1)

我为后代收集了几点......

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

文档: closeconsolefileutil (package)infoopenputsset