I got simply desktop application wrote on Go with this lib: github.com/ProtonMail/ui. The main window's drawing below:
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()
And it's reading and outputting decoded string from server connection. Server sending described below:
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
}
How i can output in this entry form
output := ui.NewMultilineNonWrappingEntry()
output.SetReadOnly(true)
received strings from server?
UPDATE:
go func() {
message, err := bufio.NewReader(conn).ReadString('
')
if err!=nil{
log.Fatal(err)
}
output.SetText(message)
}()
This code placed in ui.Main function, but it doesn't work.
You can try using the Append
method:
output := ui.NewMultilineNonWrappingEntry()
// Call this from your message receiving function:
output.Append("message")
The other option is to use SetText
and keep a buffer of the text somewhere else:
// 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())