public void Finish (string matchId, byte[] data, MatchOutcome outcome, Action<bool> callback)
        {
            Logger.d(string.Format("iOSTbmpClient.Finish matchId={0}, outcome={1}", matchId, outcome.ToString()));
            // We probably need to convert our match outcome into something we can read in


            var resultsOutput = new List<Dictionary<string, object>>();
            List<string> allParticipants = outcome.ParticipantIds;
            Dictionary<string, object> nextResult;
            foreach (string participantID in allParticipants) {
                Logger.d("Getting results for " + participantID);
                nextResult = new Dictionary<string, object>();
                // Maybe don't add them if their result is unset? Check with Bruno on this one
                if (outcome.GetResultFor(participantID) != MatchOutcome.ParticipantResult.Unset) {
                    nextResult["participantId"] = participantID;
                    nextResult["placing"] = outcome.GetPlacementFor(participantID);
                    nextResult["result"] = convertParticipantResultToiOSInt(outcome.GetResultFor(participantID));
                }
                resultsOutput.Add(nextResult);
            }
            string resultsAsJson = Json.Serialize(resultsOutput);
            Logger.d("JSonified results are " + resultsAsJson);

            sCallbackSuccessId++;
            sMatchSuccessCallbacks.Add(sCallbackSuccessId, callback);
            GPGSTBMPFinishMatch(matchId, data, data.Length, resultsAsJson, sCallbackSuccessId, TbmpMatchSuccessCallback);

        }