Пример #1
0
        /// <summary>
        /// Coroutine for retrieving xAPI statements from the configured LRS.
        /// </summary>
        /// <param name="url"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public static IEnumerator GetStatementsRoutine(string url, Action <StatementResult, UnityWebRequest> callback)
        {
            // Serialize this thing then convert into a utf-8 byte array
            var request = XAPIMessenger.BuildGetRequest(url);

            yield return(request.SendWebRequest());

            // Return whatever we found.
            StatementResult result = JsonConvert.DeserializeObject <StatementResult>(request.downloadHandler.text);

            // Correct Actor IFI Types
            for (int k = 0; k < result.StatementCount; k++)
            {
                result.Statements[k].Actor.ifi = result.Statements[k].Actor.GuessIFI();
            }

            // Make the callback
            callback(result, request);
        }
Пример #2
0
        /// <summary>
        /// Merge the specified original and recent StatementResult instances.
        ///
        /// This will merge the Statement arrays and maintain the most recent IRL for the More property.
        /// </summary>
        /// <param name="original">Original.</param>
        /// <param name="recent">Recent.</param>
        public static StatementResult Merge(StatementResult original, StatementResult recent, int?limit = null)
        {
            // Create the result to return
            StatementResult merged = new StatementResult();

            // Check how many statements we need
            merged.Statements = new List <Statement>(original.StatementCount + recent.StatementCount);

            // Copy them into a new statement array
            merged.Statements.AddRange(original.Statements);
            merged.Statements.AddRange(recent.Statements);

            // Remove if necessary
            if (limit.HasValue && merged.StatementCount > limit.Value)
            {
                merged.Statements.RemoveRange(limit.Value - 1, 1 + merged.StatementCount - limit.Value);
            }

            // Then take the  most recent IRI
            merged.MoreIRL = recent.MoreIRL;

            // And return whatever we build
            return(merged);
        }