func (p RpcMessageReceiver) handleRpc(args []interface{}, kwargs map[string]interface{}) *gowamp.CallResult { defer utils.Recover() var msg messaging.Message if msgStr, ok := args[0].(string); ok { err := msg.FromString(msgStr) if err != nil { return p.makeErrorResult(err) } } else { err := models.Convert(args[0], &msg) if err != nil { return p.makeErrorResult(err) } } log.Info("RPC message received:", msg) res, err := p.MessageProcessor.Process(msg) if err != nil { return p.makeErrorResult(err) } return p.makeResult(res) }
func (p WsMessageReceiver) handlePublish(im interceptorMessage, msg *gowamp.Publish) (interface{}, error) { if string(msg.Topic) == "wamp.session.on_leave" { args := msg.Arguments if len(args) == 0 { return nil, nil } if leavingSessionId, ok := args[0].(gowamp.ID); ok { log.Info("Broadcasting session leave:", leavingSessionId) p.broadcaster.Broadcast(leavingSessionId) return nil, nil } log.Info("Leave:", args) return nil, nil } if string(msg.Topic) == "wamp.session.on_join" { return nil, nil } if len(msg.Arguments) == 0 { return nil, nil } m, ok := msg.Arguments[0].(string) if !ok { m = models.String(msg.Arguments[0]) } var clientMessage messaging.Message converError := clientMessage.FromString(m) if converError != nil { log.Error(converError) return nil, converError } if clientMessage.Origin == messaging.ORIGIN_API { return nil, nil } log.Info("Websocket message received:", clientMessage) data, apiError := p.ClientProcessor.Process(clientMessage) if apiError != nil { log.Error(apiError) } return data, apiError }