/// <summary> /// AddAsync /// </summary> /// <param name="item"></param> /// <returns></returns> public async Task AddAsync(IAirEntity item) { await SetServerId(item); var serialiser = Configuration.Serialisation.Get(item.GetType()); var data = serialiser.Serialise(item); await Configuration.Storage.AddAsync(item.Id, data); }
/// <summary> /// Posts this instance. /// </summary> /// <param name="item">The item.</param> /// <returns></returns> public async Task UpdateAsync(IAirEntity item) { if (item.Id == 0) { throw new ArgumentException("The item does not currently exist."); } var serialiser = Configuration.Serialisation.Get(item.GetType()); var data = serialiser.Serialise(item); await Configuration.Storage.SetAsync(item.Id, data); }
/// <summary> /// Serialises the specified item. /// </summary> /// <param name="item">The item.</param> /// <returns></returns> /// <exception cref="System.NotSupportedException"></exception> public byte[] Serialise(IAirEntity item) { var stream = new MemoryStream(); using (var writer = new ProtoWriter(stream, null, null)) { writer.SetRootObject(item); int fieldNumber = 1; ProtoWriter.WriteFieldHeader(fieldNumber, WireType.Fixed64, writer); ProtoWriter.WriteInt64(item.Id, writer); var props = item.GetType() .GetProperties() .Where(IsAirMember) .OrderBy(GetAirMemberOrder); foreach (var prop in props) { var value = prop.GetGetMethod().Invoke(item, new object[] { }); if (value is string) { ProtoWriter.WriteFieldHeader(++fieldNumber, WireType.String, writer); ProtoWriter.WriteString(value as string, writer); } else if (value is long) { ProtoWriter.WriteFieldHeader(++fieldNumber, WireType.Fixed64, writer); ProtoWriter.WriteInt64((long)value, writer); } else if (value is DateTime) { ProtoWriter.WriteFieldHeader(++fieldNumber, WireType.Fixed64, writer); ProtoWriter.WriteInt64(((DateTime)value).Ticks, writer); } else { throw new NotSupportedException(); } } } return(stream.ToArray()); }