예제 #1
0
        public static async Task SaveStateAsync(IStorage storage, PersistedStateKeys keys, PersistedState newState, PersistedState oldState = null, string eTag = null)
        {
            // Check for state changes
            var save = false;
            Dictionary <string, object> changes = new Dictionary <string, object>();

            if (oldState != null)
            {
                if (JsonConvert.SerializeObject(newState.UserState) != JsonConvert.SerializeObject(oldState.UserState))
                {
                    if (eTag != null)
                    {
                        newState.UserState[ETAG] = eTag;
                    }

                    changes[keys.UserState] = newState.UserState;
                    save = true;
                }

                if (JsonConvert.SerializeObject(newState.ConversationState) != JsonConvert.SerializeObject(oldState.ConversationState))
                {
                    if (eTag != null)
                    {
                        newState.ConversationState[ETAG] = eTag;
                    }

                    changes[keys.ConversationState] = newState.ConversationState;
                    save = true;
                }
            }
            else
            {
                if (eTag != null)
                {
                    newState.UserState[ETAG]         = eTag;
                    newState.ConversationState[ETAG] = eTag;
                }

                changes[keys.UserState]         = newState.UserState;
                changes[keys.ConversationState] = newState.ConversationState;
                save = true;
            }

            // Save changes
            if (save)
            {
                await storage.WriteAsync(changes).ConfigureAwait(false);
            }
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PersistedState"/> class.
 /// </summary>
 /// <param name="keys">The persisted keys.</param>
 /// <param name="data">The data containing the state values.</param>
 public PersistedState(PersistedStateKeys keys, IDictionary <string, object> data)
 {
     UserState         = data.ContainsKey(keys.UserState) ? (IDictionary <string, object>)data[keys.UserState] : new ConcurrentDictionary <string, object>();
     ConversationState = data.ContainsKey(keys.ConversationState) ? (IDictionary <string, object>)data[keys.ConversationState] : new ConcurrentDictionary <string, object>();
 }
예제 #3
0
        public static async Task <PersistedState> LoadStateAsync(IStorage storage, PersistedStateKeys keys)
        {
            var data = await storage.ReadAsync(keys.ToArray()).ConfigureAwait(false);

            return(new PersistedState(keys, data));
        }