/// <summary>
        /// 服务端数据结构定义数据
        /// </summary>
        /// <param name="buffer">数据缓冲区</param>
        internal unsafe DataStructureBuffer(Buffer buffer)
        {
            Data = buffer.Array;
            fixed(byte *dataFixed = Data.Array)
            {
                byte *start = dataFixed + Data.Start, read = start + (OperationParameter.Serializer.HeaderSize + IndexIdentity.SerializeSize);

                Identity  = new IndexIdentity(start + OperationParameter.Serializer.HeaderSize);
                CacheName = AutoCSer.BinarySerialize.DeSerializer.DeSerializeString(ref read, start + *(int *)start);
                Data.MoveStart((int)(read - start));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 删除数据结构信息
        /// </summary>
        /// <param name="cacheName">缓存名称标识</param>
        /// <param name="identity"></param>
        private void removeDataStructure(HashString cacheName, ref IndexIdentity identity)
        {
            ClientDataStructure dataStructure;

            Monitor.Enter(cacheNameLock);
            try
            {
                if (CacheNames.TryGetValue(cacheName, out dataStructure) && dataStructure.Identity.Equals(ref identity) == 0)
                {
                    CacheNames.Remove(cacheName);
                }
            }
            finally { Monitor.Exit(cacheNameLock); }
        }
Esempio n. 3
0
 /// <summary>
 /// 删除数据结构信息
 /// </summary>
 /// <param name="cacheName">缓存名称标识</param>
 /// <param name="onRemove"></param>
 public override void RemoveDataStructure(string cacheName, Action <ReturnValue <bool> > onRemove)
 {
     if (string.IsNullOrEmpty(cacheName))
     {
         onRemove(new ReturnValue <bool> {
             Type = ReturnType.NullArgument
         });
         return;
     }
     try
     {
         client.Remove(new OperationParameter.RemoveDataStructure {
             CacheName = cacheName
         }, returnValue =>
         {
             IndexIdentity identity = returnValue.Value;
             identity.TcpReturnType = returnValue.Type;
             if (identity.ReturnType == ReturnType.Success)
             {
                 removeDataStructure(cacheName, ref identity);
             }
             if (onRemove != null)
             {
                 onRemove(new ReturnValue <bool> {
                     TcpReturnType = identity.TcpReturnType, Type = identity.ReturnType, Value = identity.ReturnType == ReturnType.Success
                 });
             }
         });
         onRemove = null;
     }
     finally
     {
         if (onRemove != null)
         {
             onRemove(new ReturnValue <bool> {
                 Type = ReturnType.TcpError
             });
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// 删除数据结构信息
        /// </summary>
        /// <param name="cacheName">缓存名称标识</param>
        /// <returns></returns>
        public async Task <ReturnValue <bool> > RemoveDataStructureTask(string cacheName)
        {
            if (string.IsNullOrEmpty(cacheName))
            {
                return new ReturnValue <bool> {
                           Type = ReturnType.NullArgument
                }
            }
            ;
            IndexIdentity identity = default(IndexIdentity);

            identity.Set(await client.RemoveAwaiter(new OperationParameter.RemoveDataStructure {
                CacheName = cacheName
            }));
            if (identity.ReturnType == ReturnType.Success)
            {
                removeDataStructure(cacheName, ref identity);
            }
            return(new ReturnValue <bool> {
                TcpReturnType = identity.TcpReturnType, Type = identity.ReturnType, Value = identity.ReturnType == ReturnType.Success
            });
        }
Esempio n. 5
0
 /// <summary>
 /// 设置服务端数据结构索引标识
 /// </summary>
 /// <param name="identity">服务端数据结构索引标识</param>
 internal unsafe void SetIdentity(IndexIdentity identity)
 {
     fixed(byte *bufferFixed = Array.Array) identity.UnsafeSerialize(bufferFixed + (Array.Start + OperationParameter.Serializer.HeaderSize));
 }
Esempio n. 6
0
 private void set(ref IndexIdentity identity)
 {
     Index    = identity.Index;
     Identity = identity.Identity;
 }
Esempio n. 7
0
 internal ulong Equals(ref IndexIdentity other)
 {
     return((uint)(other.Index ^ Index) | (other.Identity ^ Identity));
 }
Esempio n. 8
0
 /// <summary>
 /// 创建缓存节点后的回调操作
 /// </summary>
 /// <param name="identity"></param>
 private static void onDataStructureCreatedNull(IndexIdentity identity)
 {
 }
 /// <summary>
 /// 服务端数据结构定义信息
 /// </summary>
 /// <param name="cacheName">缓存名称标识</param>
 /// <param name="identity">数据结构索引标识</param>
 /// <param name="nodeData">节点序列化数据</param>
 internal ServerDataStructureBase(string cacheName, IndexIdentity identity, SubArray <byte> nodeData)
 {
     CacheName = cacheName;
     Identity  = identity;
     NodeData  = nodeData;
 }