MCPcopy Create free account
hub / github.com/daodst/chat / dispatch

Method dispatch

server/session.go:150–209  ·  view source on GitHub ↗

Message received, dispatch

(raw []byte)

Source from the content-addressed store, hash-verified

148
149// Message received, dispatch
150func (s *Session) dispatch(raw []byte) {
151 var msg ClientComMessage
152
153 log.Printf("Session.dispatch got '%s' from '%s'", raw, s.remoteAddr)
154
155 timestamp := time.Now().UTC().Round(time.Millisecond)
156 if err := json.Unmarshal(raw, &msg); err != nil {
157 // Malformed message
158 log.Println("Session.dispatch: " + err.Error())
159 s.QueueOut(ErrMalformed("", "", timestamp))
160 return
161 }
162
163 msg.from = s.uid.UserId()
164 msg.timestamp = timestamp
165
166 // Locking-unlocking is needed for long polling.
167 // Should not affect performance
168 s.rw.Lock()
169 defer s.rw.Unlock()
170
171 switch {
172 case msg.Pub != nil:
173 s.publish(&msg)
174 log.Println("dispatch: Pub done")
175
176 case msg.Sub != nil:
177 s.subscribe(&msg)
178 log.Println("dispatch: Sub done")
179
180 case msg.Leave != nil:
181 s.leave(&msg)
182 log.Println("dispatch: Leave done")
183
184 case msg.Login != nil:
185 s.login(&msg)
186 log.Println("dispatch: Login done")
187
188 case msg.Get != nil:
189 s.get(&msg)
190 log.Println("dispatch: Get." + msg.Get.What + " done")
191
192 case msg.Set != nil:
193 s.set(&msg)
194 log.Println("dispatch: Set." + msg.Set.What + " done")
195
196 case msg.Del != nil:
197 s.del(&msg)
198 log.Println("dispatch: Del." + msg.Del.What + " done")
199
200 case msg.Acc != nil:
201 s.acc(&msg)
202 log.Println("dispatch: Acc done")
203
204 default:
205 // Unknown message
206 s.QueueOut(ErrMalformed("", "", msg.timestamp))
207 log.Println("Session.dispatch: unknown message")

Callers 2

readOnceMethod · 0.95
readLoopMethod · 0.95

Calls 13

QueueOutMethod · 0.95
publishMethod · 0.95
subscribeMethod · 0.95
leaveMethod · 0.95
loginMethod · 0.95
getMethod · 0.95
setMethod · 0.95
delMethod · 0.95
accMethod · 0.95
ErrMalformedFunction · 0.85
LockMethod · 0.80
UnlockMethod · 0.80

Tested by

no test coverage detected