@@ -58,12 +58,27 @@ func (this *UserData) MessageQueue(serverId int) chan *Message {
58
58
return this .serverMsgQueue [serverId ]
59
59
}
60
60
61
+ func (this * UserData ) Remove (serverId int ) {
62
+ this .rwMutex .RLock ()
63
+ defer this .rwMutex .RUnlock ()
64
+ delete (this .serverMsgQueue , serverId )
65
+ }
66
+
61
67
func (this * UserData ) InitMessageQueue (serverId int ) {
62
68
this .rwMutex .Lock ()
63
69
defer this .rwMutex .Unlock ()
64
70
this .serverMsgQueue [serverId ] = make (chan * Message , 1 )
65
71
}
66
72
73
+ func (this * UserData ) SendMessage (message * Message ) {
74
+ this .rwMutex .Lock ()
75
+ defer this .rwMutex .Unlock ()
76
+
77
+ for _ , messageQueue := range this .serverMsgQueue {
78
+ messageQueue <- message
79
+ }
80
+ }
81
+
67
82
var Book = & book {users : make (map [int ]* UserData )}
68
83
69
84
type book struct {
@@ -115,7 +130,7 @@ func (this *book) DelUser(user, serverId int) {
115
130
if this .users [user ].Len () == 1 {
116
131
delete (this .users , user )
117
132
} else {
118
- delete ( this .users [user ].serverMsgQueue , serverId )
133
+ this .users [user ].Remove ( serverId )
119
134
}
120
135
}
121
136
@@ -140,19 +155,15 @@ func (this *book) Len() int {
140
155
func (this * book ) PostMessage (uid int , message * Message ) {
141
156
if userData , ok := this .users [uid ]; ok {
142
157
logger .Infoln ("post message to" , uid , message )
143
- for _ , messageQueue := range userData .serverMsgQueue {
144
- messageQueue <- message
145
- }
158
+ userData .SendMessage (message )
146
159
}
147
160
}
148
161
149
162
// 给所有用户广播消息
150
163
func (this * book ) BroadcastAllUsersMessage (message * Message ) {
151
164
logger .Infoln ("BroadcastAllUsersMessage message" , message )
152
165
for _ , userData := range this .users {
153
- for _ , messageQueue := range userData .serverMsgQueue {
154
- messageQueue <- message
155
- }
166
+ userData .SendMessage (message )
156
167
}
157
168
}
158
169
@@ -163,9 +174,7 @@ func (this *book) BroadcastToOthersMessage(message *Message, myself int) {
163
174
if uid == myself {
164
175
continue
165
176
}
166
- for _ , messageQueue := range userData .serverMsgQueue {
167
- messageQueue <- message
168
- }
177
+ userData .SendMessage (message )
169
178
}
170
179
}
171
180
0 commit comments