У меня есть просто настольное приложение, написанное на 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, но он не работает.