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); }
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); }
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); }