Example #1
0
 /// <summary>
 /// Serialises the specified item.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <returns></returns>
 public byte[] Serialise(IAirEntity item)
 {
     using (var stream = new MemoryStream())
     {
         ProtoBuf.Serializer.Serialize(stream, item);
         return(stream.ToArray());
     }
 }
Example #2
0
        /// <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);
        }
Example #3
0
 /// <summary>
 /// SetServerId
 /// </summary>
 /// <param name="item"></param>
 /// <returns>Returns on completion</returns>
 private Task SetServerId(IAirEntity item)
 {
     // await Configuration.Storage.GetLockAsync(1);
     // var node = await TryGetAsync<AirGraphNode>(1);
     // item.Id = node.NextAvailableId++;
     // await UpdateAsync(node);
     // Configuration.Storage.ReleaseLockAsync(1);
     item.Id = Configuration.IdFactory.GetNextId();
     return(Task.Factory.StartNew(() => { }));
 }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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());
        }