Skip to content

Commit fcdbdc9

Browse files
add message reply.
1 parent 4495fb3 commit fcdbdc9

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

api/room/room.go

+9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const (
1818
StartType = "start"
1919
CloseType = "close"
2020
PingType = "ping"
21+
ReplyType = "reply"
2122
JoinType = "join"
2223
ErrorType = "error"
2324
LeaveType = "leave"
@@ -50,6 +51,14 @@ type Message struct {
5051
Content interface{} `json:"content"`
5152
}
5253

54+
func (m *Message) GetReply() *Message {
55+
return &Message{
56+
Type: ReplyType,
57+
RequestId: m.RequestId,
58+
Content: map[string]string{},
59+
}
60+
}
61+
5362
func (m *Message) ToString() string {
5463
bs, err := json.Marshal(m)
5564
if err != nil {

serve/socket/socket.go

+22-13
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,25 @@ func (s *socket) WriteMessage(messageType int, data []byte) error {
6969
return s.conn.WriteMessage(messageType, data)
7070
}
7171

72+
func (s *socket) WriteDataIgnoreError(data interface{}) {
73+
err := s.WriteData(data)
74+
if err != nil {
75+
joinLog.WithError(err).Error("send message write message")
76+
s.writeWebsocketError(roomApi.NewNetWorkTimeoutError(err.Error()))
77+
}
78+
}
79+
80+
func (s *socket) WriteData(data interface{}) error {
81+
s.rwLock.Lock()
82+
defer s.rwLock.Unlock()
83+
bs, err := json.Marshal(data)
84+
if err != nil {
85+
return roomApi.NewMessageContentError("send message marshal error %s", err.Error())
86+
}
87+
88+
return s.conn.WriteMessage(websocket.TextMessage, bs)
89+
}
90+
7291
func (s *socket) WriteJSON(v interface{}) error {
7392
s.rwLock.Lock()
7493
defer s.rwLock.Unlock()
@@ -133,24 +152,14 @@ func readClientMessage(ctx context.Context, socket *socket, room roomApi.RemoteR
133152
return nil
134153
}
135154

155+
socket.WriteDataIgnoreError(msg.GetReply())
136156
return nil
137157
}
138158

139159
func onRoomMessage(ctx context.Context, socket *socket, room roomApi.RemoteRoom) error {
140160
select {
141161
case msg := <-room.OnMessage():
142-
bs, err := json.Marshal(msg)
143-
if err != nil {
144-
return roomApi.NewMessageContentError("send message marshal error %s", err.Error())
145-
}
146-
147-
err = socket.WriteMessage(websocket.TextMessage, bs)
148-
if err != nil {
149-
joinLog.WithError(err).Error("send message write message")
150-
socket.writeWebsocketError(roomApi.NewNetWorkTimeoutError(err.Error()))
151-
return nil
152-
}
153-
162+
socket.WriteDataIgnoreError(msg)
154163
case <-room.Done():
155164
return roomApi.NewRoomCloseError("room %s leave", room.GetRoomAddress().ID)
156165
case <-ctx.Done():
@@ -235,7 +244,7 @@ func (s *WebSocket) serveRoom(opt *roomApi.Info, connection *roomApi.Connection,
235244
if err != nil {
236245
retCode = "read_message_close"
237246
socket.writeWebsocketError(err)
238-
joinLog.WithField("connection", connection.Address.ID).Info(err)
247+
joinLog.WithField("readClientMessage", connection.Address.ID).Info(err)
239248
return
240249
}
241250
}

0 commit comments

Comments
 (0)