func handleGameUpdate(file *os.File, key string, value []byte, u *uistate.UIState) { curTime := time.Now().UnixNano() / 1000000 valueStr := string(value) fmt.Fprintf(file, fmt.Sprintf("key: %s\n", key)) fmt.Fprintf(file, fmt.Sprintf("value: %s\n", valueStr)) fmt.Fprintf(file, fmt.Sprintf("time: %v\n", curTime)) tmp := strings.Split(key, "/") if len(tmp) == 3 { keyTime, _ := strconv.ParseInt(strings.Split(tmp[2], "-")[0], 10, 64) if keyTime > u.LatestTimestamp { u.LatestTimestamp = keyTime } fmt.Fprintf(file, fmt.Sprintf("diff: %d milliseconds\n\n", curTime-keyTime)) } else { fmt.Fprintf(file, "\n") } fmt.Println(key, valueStr) keyType := strings.Split(key, "/")[1] switch keyType { case "log": updateType := strings.Split(valueStr, "|")[0] switch updateType { case Deal: onDeal(valueStr, u) case Pass: onPass(valueStr, u) case Take: onTake(valueStr, u) case Play: onPlay(valueStr, u) case TakeTrick: onTakeTrick(valueStr, u) case Ready: onReady(valueStr, u) } case "players": switch strings.Split(key, "/")[3] { case "player_number": onPlayerNum(key, valueStr, u) case "settings_sg": onSettings(key, valueStr, u) } } }