public void Save(Action <bool> onDone) { if (Server.GetUserInfo() == null || Server.GetUserInfo().user_id != RecordInfo.owner) { throw new Exception("Read-only data!"); } if (!Dirty) { return; } List <SetUserDataRequest> saveSet = new List <SetUserDataRequest>(); foreach (DataItemReply item in DirtyKeys.Values) { saveSet.Add(new SetUserDataRequest { key = item.key, value = item.value, data_type = item.data_type } ); } Server.SetDataKeys(Id, saveSet, delegate(SetDataReply obj) { DirtyKeys.Clear(); Dirty = false; onDone(true); }, delegate(ErrorReply reply) { onDone(false); } ); }