示例#1
0
/**
 * Handles a received message from DB Queue, sending relevant info to connected client
 */
func HandleQueueMessage(msg models.QueueMessage) {

	// Validations
	// TODO: Abstract this please
	if msg.Target == "" || msg.Target != "data" {
		fmt.Println("Invalid or missing target defined in message!")
		return
	}

	if msg.Code == "" {
		fmt.Println("No entity/code defined in message!")
		return
	}

	if msg.Action == "" {
		fmt.Println("No action defined in message!")
		return
	}

	if msg.Data == nil {
		fmt.Println("No data provided in message!")
		return
	}

	// Variables for query result
	var result interface{}
	var err error

	// Check what type of entity we're dealing with
	switch msg.Code {
	case "game":
		err, result = dbModels.Games{}.HandleMessage(msg.BaseMessage)
	default:
		fmt.Printf("Unknown entity: %s\n", msg.Code)
		return
	}

	// Error from query
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	// Parse result from relevant interface model to bytes
	data, err := json.Marshal(result)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	// Parse previous bytes to generic map
	var outData = make(map[string]interface{})
	if err := json.Unmarshal(data, &outData); err != nil {
		fmt.Println(err.Error())
		return
	}

	// Build base response message and init final one
	msg.Receiver = msg.Sender
	msg.Sender = ID
	msg.Data = outData

	// Send it
	q.SendMessage(msg)
}