Обновление многострочной записи из чтения соединения - PullRequest
0 голосов
/ 23 мая 2018

У меня есть просто настольное приложение, написанное на Go с этой библиотекой: github.com/ProtonMail/ui.Рисунок основного окна ниже:

err := ui.Main(func() {
    window := ui.NewWindow("Chat", 500, 500, false)
    input := ui.NewEntry()
    send := ui.NewButton("Send")
    output := ui.NewMultilineNonWrappingEntry()
    output.SetReadOnly(true)
    mainBox := ui.NewHorizontalBox()
    usersBox := ui.NewVerticalBox()
    messageBox:=ui.NewVerticalBox()
    messageBox.Append(output, true)
    messageBox.Append(input, false)
    messageBox.Append(send, false)
    mainBox.Append(usersBox, false)
    mainBox.Append(messageBox, true)
    send.OnClicked(func(*ui.Button) {
        _, err := conn.Write([]byte(JSONencode(userExample1.Text(),input.Text(),"SendMessageTo")))
        if err!=nil{
            fmt.Println("OnClickedError!")
        }
        input.SetText("")
    })
    window.SetChild(mainBox)
    window.OnClosing(func(*ui.Window) bool {
        ui.Quit()
        return true
    })
    window.Show()

И это чтение и вывод декодированной строки из соединения с сервером.Отправка на сервер описана ниже:

func ParseJSON(bytes []byte, conn net.Conn) (Message, string, string) {
    flag := "tcp"
    message := Message{}
    err := json.Unmarshal(bytes, &message)
    if err != nil {
        log.Print("Unmarshal doesn't work: ")
        log.Fatal(err)
    }
    fmt.Println(message.User.Login)
    fmt.Println(message.Content)
    conn.Write([]byte(message.Content))
    return message, "func", flag
}

Как я могу вывести в этой форме ввода

output := ui.NewMultilineNonWrappingEntry()
output.SetReadOnly(true)

полученные строки с сервера?

ОБНОВЛЕНИЕ:

go func() {
            message, err := bufio.NewReader(conn).ReadString('\n')
            if err!=nil{
                log.Fatal(err)
            }
            output.SetText(message)
        }()

Этот код помещен в функцию ui.Main, но он не работает.

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете попробовать использовать метод Append:

output := ui.NewMultilineNonWrappingEntry()

// Call this from your message receiving function:
output.Append("message")

Другой вариант - использовать SetText и хранить буфер текста в другом месте:

// Create a buffer:
buf := bytes.Buffer{}

// Write incoming messages to it:
buf.WriteString("message")

// Set the contents from the buffer
// This might be called periodically (and the buffer reseted):
output.SetText(buf.String())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...