func ParseSetUserStateResponse(pubnubInstance *messaging.Pubnub, returnChannel chan []byte, channel string, key string, val string, testName string, responseChannel chan string) { for { value, ok := <-returnChannel if !ok { break } if string(value) != "[]" { response := fmt.Sprintf("%s", value) //fmt.Println("Test '" + testName + "':" +response) message := fmt.Sprintf("{\"%s\": \"%s\"}", key, val) //fmt.Println("%s", message) if strings.Contains(response, message) { errorChannel := make(chan []byte) returnChannel2 := make(chan []byte) time.Sleep(3 * time.Second) if testName == "SetGetUserState" { go pubnubInstance.GetUserState(channel, returnChannel2, errorChannel) } else if testName == "SetGetUserStateHereNow" { go pubnubInstance.HereNow(channel, true, true, returnChannel2, errorChannel) } else if testName == "SetGetUserStateGlobalHereNow" { go pubnubInstance.GlobalHereNow(true, true, returnChannel2, errorChannel) } go ParseUserStateResponse(returnChannel2, channel, key, val, testName, responseChannel) go ParseErrorResponse(errorChannel, responseChannel) break } else { responseChannel <- "Test '" + testName + "': failed." break } } } }
// ParseSubscribeResponseForPresence will look for the connection status in the response // received on the go channel. func ParseSubscribeResponseForPresence(pubnubInstance *messaging.Pubnub, customUuid string, returnChannel chan []byte, channel string, testName string, responseChannel chan string) { for { value, ok := <-returnChannel if !ok { break } //response := fmt.Sprintf("%s", value) //fmt.Println(response); if string(value) != "[]" { if (testName == "CustomUuid") || (testName == "HereNow") || (testName == "HereNowWithCipher") { response := fmt.Sprintf("%s", value) message := "'" + channel + "' connected" messageReconn := "'" + channel + "' reconnected" if (strings.Contains(response, message)) || (strings.Contains(response, messageReconn)) { errorChannel := make(chan []byte) returnChannel := make(chan []byte) time.Sleep(3 * time.Second) go pubnubInstance.HereNow(channel, true, true, returnChannel, errorChannel) go ParseHereNowResponse(returnChannel, channel, customUuid, testName, responseChannel) go ParseErrorResponse(errorChannel, responseChannel) break } } else if testName == "WhereNow" { response := fmt.Sprintf("%s", value) message := "'" + channel + "' connected" messageReconn := "'" + channel + "' reconnected" if (strings.Contains(response, message)) || (strings.Contains(response, messageReconn)) { errorChannel := make(chan []byte) returnChannel := make(chan []byte) time.Sleep(3 * time.Second) go pubnubInstance.WhereNow(customUuid, returnChannel, errorChannel) go ParseHereNowResponse(returnChannel, channel, customUuid, testName, responseChannel) go ParseErrorResponse(errorChannel, responseChannel) break } } else if testName == "GlobalHereNow" { response := fmt.Sprintf("%s", value) message := "'" + channel + "' connected" messageReconn := "'" + channel + "' reconnected" if (strings.Contains(response, message)) || (strings.Contains(response, messageReconn)) { errorChannel := make(chan []byte) returnChannel := make(chan []byte) time.Sleep(3 * time.Second) go pubnubInstance.GlobalHereNow(true, false, returnChannel, errorChannel) go ParseHereNowResponse(returnChannel, channel, customUuid, testName, responseChannel) go ParseErrorResponse(errorChannel, responseChannel) break } } else { response := fmt.Sprintf("%s", value) message := "'" + channel + "' connected" messageReconn := "'" + channel + "' reconnected" //fmt.Println("Test3 '" + testName + "':" +response) if (strings.Contains(response, message)) || (strings.Contains(response, messageReconn)) { errorChannel2 := make(chan []byte) returnSubscribeChannel := make(chan []byte) time.Sleep(1 * time.Second) go pubnubInstance.Subscribe(channel, "", returnSubscribeChannel, false, errorChannel2) go ParseResponseDummy(returnSubscribeChannel) go ParseResponseDummy(errorChannel2) } else { if testName == "Presence" { data, _, returnedChannel, err2 := messaging.ParseJSON(value, "") var occupants []struct { Action string Uuid string Timestamp float64 Occupancy int } if err2 != nil { responseChannel <- "Test '" + testName + "': failed. Message: 1 :" + err2.Error() break } //fmt.Println("Test3 '" + testName + "':" +data) err := json.Unmarshal([]byte(data), &occupants) if err != nil { //fmt.Println("err '" + testName + "':",err) responseChannel <- "Test '" + testName + "': failed. Message: 2 :" + err.Error() break } else { channelSubRepsonseReceived := false for i := 0; i < len(occupants); i++ { if (occupants[i].Action == "join") && occupants[i].Uuid == customUuid { channelSubRepsonseReceived = true break } } if !channelSubRepsonseReceived { responseChannel <- "Test '" + testName + "': failed. Message: err3" break } if channel == returnedChannel { responseChannel <- "Test '" + testName + "': passed." break } else { responseChannel <- "Test '" + testName + "': failed. Message: err4" break } } } } } } } }