public async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var stateName = grainState.GetType().Name;
            var key = grainReference.ToKeyString();
            var id = string.Format(CultureInfo.InvariantCulture, "{0}/{1}", stateName, key);

            using (IAsyncDocumentSession session = this.documentStore.OpenAsyncSession())
            {
                var state = await session.LoadAsync<RavenJObject>(id);
                if (state != null)
                {
                    grainState.SetAll(state.ToDictionary(x => x.Key, x => x.Value.Value<object>()));
                }
            }
        }
 /// <summary>
 /// Constructs a grain state instance by deserializing a JSON document.
 /// </summary>
 /// <param name="grainState">Grain state to be populated for storage.</param>
 /// <param name="entityData">JSON storage format representaiton of the grain state.</param>
 protected static void ConvertFromStorageFormat(GrainState grainState, string entityData)
 {
     JavaScriptSerializer deserializer = new JavaScriptSerializer();
     object data = deserializer.Deserialize(entityData, grainState.GetType());
     var dict = ((GrainState)data).AsDictionary();
     grainState.SetAll(dict);
 }
Example #3
0
        async Task IStorageProvider.ReadStateAsync(Type grainType, GrainReference grainReference, GrainState grainState)
        {
            var grainIdentity = GrainIdentity.FromGrainReference(grainType.FullName, grainReference);

            if (_ignore)
                return;

            var state = await _dataManager.ReadStateAsync(grainIdentity);
            if (null != state)
                grainState.SetAll(state);
        }
Example #4
0
 public virtual Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
 {
     Log.Info(0, "ReadStateAsync for {0} {1}", grainType, grainReference);
     Interlocked.Increment(ref readCount);
     lock (StateStore)
     {
         var storedState = GetLastState(grainType, grainReference);
         grainState.SetAll(storedState); // Read current state data
     }
     return TaskDone.Done;
 }
        public async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState)
        {
            var con = await GetFreeConnection();

            var table = GetTableName(grainState);
            string keyAsString = GetKey(grainReference);

            string query;

            if (CustomTable)
                query = string.Format("select * from `{0}` where `guid` = \"{1}\";", table,
                    MySqlHelper.EscapeString(keyAsString));
            else
                query = string.Format("select * from `{0}` where `guid` = \"{1}\" AND `type` = \"{2}\";", table,
                    MySqlHelper.EscapeString(keyAsString), MySqlHelper.EscapeString(grainType));

            using (var cmd = new MySqlCommand(query, con))
            {
                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    if (await reader.ReadAsync())
                    {
                        Dictionary<string, object> dict = new Dictionary<string, object>();

                        for (int i = 0; i < reader.FieldCount; ++i)
                            dict.Add(reader.GetName(i), reader.GetValue(i));

                        if (dict.ContainsKey("data"))
                        {
                            try
                            {
                                var data =
                                    (GrainState)
                                        Newtonsoft.Json.JsonConvert.DeserializeObject(dict["data"].ToString(),
                                            grainState.GetType());
                                grainState.SetAll(data.AsDictionary());
                            }
                            catch
                            {
                                grainState.SetAll(null); /* corruption? */
                            }
                        }
                        else
                            grainState.SetAll(null);
                    }
                }
            }

            await AddFreeConnection(con);
        }