// Connection handler. This function called after new client // connected to websocket server. // Also this method performs register user - client must send valid apiKey // to receive messages from redis. func wsHandler(ws *websocket.Conn) { log.Println("New client") defer ws.Close() // websocket.Message.Send(ws, "Hello dear user!") for { // Message received from client var message string // Read messages from client // Code blocks here, after any message received // will resume execution. if err := websocket.Message.Receive(ws, &message); err != nil { log.Println("Error receiving message. Closing connection.") return } // Register user // TODO: Cache user user, _ := common.FindUserByApiKey(message) if user != nil { log.Println("Registering apiKey", user.ApiKey) clients[user.ApiKey] = ws } else { log.Println("Error registering user", message) } } }
// Get users index name by apiKey func extractIndexAndType(message string) (string, string, error) { key, logType, err := common.ExtractApiKey(message) if err != nil { return "", "", err } if indexName, ok := userIndexNameCache[key]; ok { return indexName, logType, nil } user, err := common.FindUserByApiKey(key) if err != nil { return "", "", err } if user == nil { return "", "", errUserNotFound } userIndexNameCache[user.GetIndexName()] = user.GetIndexName() return user.GetIndexName(), logType, nil }