/
pairchat_window.go
102 lines (86 loc) · 2.35 KB
/
pairchat_window.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"encoding/json"
"fmt"
"github.com/bitly/go-nsq"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"log"
"strings"
"time"
)
type PairChatWindow struct {
*walk.MainWindow
chatView *ChatMsgView
msgEdit *walk.TextEdit
sendBtn *walk.PushButton
msgChan chan *NsqMsg
usr User
partner User
}
func NewPairChatWindow(_usr, _partner User) {
walk.SetPanicOnError(true)
myWindow, _ := walk.NewMainWindow()
mw := &PairChatWindow{
MainWindow: myWindow,
usr: _usr,
partner: _partner,
msgChan: make(chan *NsqMsg, 1),
}
mw.SetTitle(fmt.Sprintf("与%s私聊", _partner.Nick))
msgEdit, _ := walk.NewTextEdit(mw)
mw.msgEdit = msgEdit
mw.msgEdit.SetSize(walk.Size{530, 100})
mw.msgEdit.SetX(10)
mw.msgEdit.SetY(360)
mw.msgEdit.SetReadOnly(false)
chatView, _ := NewChatMsgView(mw)
mw.chatView = chatView
mw.chatView.SetSize(walk.Size{530, 350})
mw.chatView.SetX(10)
mw.chatView.SetY(5)
sendBtn, _ := walk.NewPushButton(mw)
mw.sendBtn = sendBtn
mw.sendBtn.SetText("发送")
mw.sendBtn.SetX(480)
mw.sendBtn.SetY(470)
mw.sendBtn.SetSize(walk.Size{60, 30})
mw.sendBtn.Clicked().Attach(mw.sendBtn_OnClick)
mw.MainWindow.Show()
mw.msgEdit.SetFocus()
mw.SetMinMaxSize(walk.Size{565, 550}, walk.Size{565, 550})
mw.SetSize(walk.Size{565, 550})
pairChatMgr.register(mw.partner.Id, mw.msgChan)
go mw.msgRouter()
mw.MainWindow.Run()
pairChatMgr.unregister(mw.partner.Id)
}
func (mw *PairChatWindow) sendBtn_OnClick() {
text := mw.msgEdit.Text()
if strings.EqualFold(text, "") {
return
}
mw.chatView.PostAppendTextln(mw.usr.Nick + " " + time.Now().Format("2006-01-02 15:04:05") + " :")
mw.chatView.PostAppendTextln(" " + text)
go Publisher.Write(mw.partner.Id, text)
mw.msgEdit.SetText("")
}
func (mw *PairChatWindow) msgRouter() {
for {
select {
case m := <-mw.msgChan:
log.Printf("msgRouter, id = %s, body = %s", string(m.Id[:]), string(m.Body[:]))
var chatMsg Message
err := json.Unmarshal(m.Body, &chatMsg)
if err != nil {
m.returnChannel <- &nsq.FinishedMessage{m.Id, 0, true}
continue
}
if !strings.EqualFold(chatMsg.Body.From.Id, mw.partner.Id) && !strings.EqualFold(chatMsg.Body.From.Id, mw.usr.Id) {
continue
}
mw.chatView.PostAppendTextln(chatMsg.Body.From.Nick + " " + chatMsg.Time + " :")
mw.chatView.PostAppendTextln(" " + chatMsg.Body.Msg)
}
}
}