通过套接字连接发送/接收TUI数据

时间:2019-01-23 05:56:28

标签: linux go networking tui

我有一个TUI(文本用户界面)程序,我想通过网络连接提供该程序。下面是登录页面上的示例(目前尚不完善)。我的TUI库使用的是tui-go

  

program.go

new TextFormField( textAlign: TextAlign.end, obscureText: false, style: const TextStyle( fontFamily: 'iransans', color: Colors.black, ), decoration: new InputDecoration( labelText: 'نام و نام خانوادگی', labelStyle: const TextStyle( color: Colors.blue, fontSize: 17.0, textBaseline: TextBaseline.alphabetic, ), border: InputBorder.none, contentPadding: const EdgeInsets.only( top: 30.0, right: 30.0, bottom: 30.0, left: 5.0), ), )

然后我有另一个程序可以在pty中执行program.go的二进制文件,并通过套接字发送它。理想情况下,我希望用户使用多种方法进行连接,例如telnet,ssh或netcat。问题是,当我通过套接字发送pty时,它的行为与我仅从外壳程序中运行program.go的二进制文件时的行为不同。下面是我的服务器程序的副本。我正在使用pty库来创建通过套接字发送的* os.File。

  

server.go

package main

import (
    "log"
    "github.com/marcusolsson/tui-go"
)

var logo string = "My Logo"

func main() {
    Login()
}

func Login() {
    inUser := tui.NewEntry()
    inUser.SetFocused(true)

    inPass := tui.NewEntry()
    inPass.SetEchoMode(tui.EchoModePassword)

    form := tui.NewGrid(0, 0)
    form.AppendRow(tui.NewLabel("Username"), tui.NewLabel("Password"))
    form.AppendRow(inUser, inPass)

    // TODO: create OnActivated function
    btnLogin := tui.NewButton("[Login]")

    // TODO: create OnActivated function
    btnRegister := tui.NewButton("[Register]")

    buttons := tui.NewHBox(
        tui.NewSpacer(),
        tui.NewPadder(1, 0, btnLogin),
        tui.NewPadder(1, 0, btnRegister),
    )

    window := tui.NewVBox(
        tui.NewPadder(1, 1, form),
        buttons,
    )
    window.SetBorder(true)

    root := tui.NewVBox(
        tui.NewSpacer(),
        window,
        tui.NewSpacer(),
    )

    tui.DefaultFocusChain.Set(inUser, inPass, btnLogin, btnRegister)

    ui, err := tui.New(root)
    if err != nil {
        log.Fatal(err)
    }

    ui.SetKeybinding("Esc", func() { ui.Quit() })

    if err := ui.Run(); err != nil {
        log.Fatal(err)
    }
}

是否总有TUI可以正常工作,就像它可以从Shell运行一样?另外,我将如何读取用户输入到TUI中的数据?因为当尝试同时读取连接和pty返回的* os.File时,我似乎根本无法获得任何数据。

非常感谢您的帮助!

0 个答案:

没有答案