Exemple #1
0
            AutoCSer.Net.TcpServer.ReturnValue <ulong> append(AutoCSer.DiskBlock.AppendBuffer buffer)
            {
                AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p2> _wait_ = AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p2> .Pop();

                try
                {
                    AutoCSer.Net.TcpInternalServer.ClientSocketSender _socket_ = _TcpClient_.Sender;
                    if (_socket_ != null)
                    {
                        TcpInternalServer._p1 _inputParameter_ = new TcpInternalServer._p1
                        {
                            p0 = buffer,
                        };
                        TcpInternalServer._p2 _outputParameter_ = new TcpInternalServer._p2
                        {
                        };
                        AutoCSer.Net.TcpServer.ReturnType _returnType_ = _socket_.WaitGet <TcpInternalServer._p1, TcpInternalServer._p2>(_c0, ref _wait_, ref _inputParameter_, ref _outputParameter_);
                        return(new AutoCSer.Net.TcpServer.ReturnValue <ulong> {
                            Type = _returnType_, Value = _outputParameter_.Return
                        });
                    }
                }
                finally
                {
                    if (_wait_ != null)
                    {
                        AutoCSer.Net.TcpServer.AutoWaitReturnValue <TcpInternalServer._p2> .PushNotNull(_wait_);
                    }
                }
                return(new AutoCSer.Net.TcpServer.ReturnValue <ulong> {
                    Type = AutoCSer.Net.TcpServer.ReturnType.ClientException
                });
            }
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="buffer">数据</param>
        /// <param name="onWrite">添加数据回调委托</param>
        internal WriteRequest(ref AppendBuffer buffer, Func <AutoCSer.Net.TcpServer.ReturnValue <ulong>, bool> onWrite)
        {
            this.OnWrite = onWrite;
            SubBuffer.Pool.GetBuffer(ref Buffer, (Size = buffer.Buffer.Length) + sizeof(int));
            System.Buffer.BlockCopy(buffer.Buffer.Array, buffer.Buffer.Start, Buffer.Buffer, Buffer.StartIndex + sizeof(int), Size);

            fixed(byte *bufferFixed = Buffer.Buffer) * (int *)(bufferFixed + Buffer.StartIndex) = Size;
        }
Exemple #3
0
 private void append(AppendBuffer buffer, Func <AutoCSer.Net.TcpServer.ReturnValue <ulong>, bool> onWrite)
 {
     if (buffer.CheckBlockIndex(index))
     {
         block.Append(ref buffer, onWrite);
     }
     else
     {
         onWrite(0);
     }
 }
Exemple #4
0
 private void append(AppendBuffer buffer, AutoCSer.Net.TcpServer.ServerCallback <ulong> onWrite)
 {
     if (buffer.CheckBlockIndex(index))
     {
         block.Append(ref buffer, onWrite);
     }
     else
     {
         onWrite.Callback(0);
     }
 }
Exemple #5
0
 /// <summary>
 /// 添加数据
 /// </summary>
 /// <param name="buffer">数据</param>
 /// <param name="onWrite">添加数据回调委托</param>
 void IBlock.Append(ref AppendBuffer buffer, AutoCSer.Net.TcpServer.ServerCallback <ulong> onWrite)
 {
     if (isDisposed == 0)
     {
         ulong index = buffer.Index & Server.MaxIndex;
         if (index == 0 || (long)index + (buffer.Buffer.Length + sizeof(int)) > fileLength)
         {
             if (writeRequests.IsPushHead(new WriteRequest(ref buffer, onWrite)))
             {
                 writeWait.Set();
             }
             if (isDisposed != 0)
             {
                 for (WriteRequest head = writeRequests.GetClear(); head != null; head = head.Error())
                 {
                     ;
                 }
             }
         }
         else
         {
             ReadRequest readRequest = new ReadRequest {
                 Index = (long)index, Size = buffer.Buffer.Length
             };
             readRequest.WriteRequest = new FileWriteRequest(ref buffer, onWrite, this);
             if (readRequests.IsPushHead(readRequest))
             {
                 readWait.Set();
             }
             if (isDisposed != 0)
             {
                 for (ReadRequest head = readRequests.GetClear(); head != null; head = head.Error())
                 {
                     ;
                 }
                 for (WriteRequest head = writeRequests.GetClear(); head != null; head = head.Error())
                 {
                     ;
                 }
             }
         }
     }
     else
     {
         onWrite.Callback(0);
     }
 }
Exemple #6
0
        /// <summary>
        /// 设置远程对象
        /// </summary>
        /// <param name="value"></param>
        /// <param name="blockIndex">磁盘块编号</param>
        /// <param name="bufferSize">序列化缓冲区大小</param>
        /// <returns></returns>
        public async Task <bool> SetAsync(valueType value, int blockIndex, SubBuffer.Size bufferSize = SubBuffer.Size.Kilobyte4)
        {
            if (value == null)
            {
                SetNull();
                return(true);
            }
            Server.TcpInternalClient client = ClientPool.Get(blockIndex);
            if (client != null)
            {
                BinarySerialize.Serializer serializer = BinarySerialize.Serializer.YieldPool.Default.Pop() ?? new BinarySerialize.Serializer();
                SubBuffer.PoolBufferFull   buffer     = default(SubBuffer.PoolBufferFull);
                SubBuffer.Pool.GetPool(bufferSize).Get(ref buffer);
                try
                {
                    int          size;
                    AppendBuffer appendBuffer = getAppendBuffer(ref value, serializer, ref buffer, out size);
                    appendBuffer.BlockIndex = (ushort)blockIndex;
                    AutoCSer.Net.TcpServer.ReturnValue <ulong> index = await client.appendAwaiter(appendBuffer);

                    if (index.Type == Net.TcpServer.ReturnType.Success && index.Value != 0)
                    {
                        Index = index.Value;
                        Size  = size;
                        value = Value;
                        state = MemberState.Remote;
                        return(true);
                    }
                }
                finally
                {
                    buffer.Free();
                    serializer.Free();
                }
            }
            return(false);
        }
Exemple #7
0
 AutoCSer.Net.TcpServer.AwaiterBox <ulong> appendAwaiter(AutoCSer.DiskBlock.AppendBuffer buffer)
 {
     AutoCSer.Net.TcpServer.AwaiterBox <ulong>         _awaiter_ = new AutoCSer.Net.TcpServer.AwaiterBox <ulong>();
     AutoCSer.Net.TcpInternalServer.ClientSocketSender _socket_  = _TcpClient_.Sender;
     if (_socket_ != null)
     {
         TcpInternalServer._p1 _inputParameter_ = new TcpInternalServer._p1
         {
             p0 = buffer,
         };
         AutoCSer.Net.TcpServer.ReturnType _returnType_;
         AutoCSer.Net.TcpServer.AwaiterReturnValueBox <ulong> _outputParameter_ = default(AutoCSer.Net.TcpServer.AwaiterReturnValueBox <ulong>);
         _returnType_ = _socket_.GetAwaiter <TcpInternalServer._p1, AutoCSer.Net.TcpServer.AwaiterReturnValueBox <ulong> >(_a0, _awaiter_, ref _inputParameter_, ref _outputParameter_);
         if (_returnType_ != AutoCSer.Net.TcpServer.ReturnType.Success)
         {
             _awaiter_.Call(_returnType_);
         }
     }
     else
     {
         _awaiter_.Call(AutoCSer.Net.TcpServer.ReturnType.ClientException);
     }
     return(_awaiter_);
 }
Exemple #8
0
 /// <summary>
 /// 添加数据
 /// </summary>
 /// <param name="buffer">数据</param>
 /// <param name="onWrite">添加数据回调委托</param>
 /// <param name="file">文件块</param>
 internal FileWriteRequest(ref AppendBuffer buffer, Func <AutoCSer.Net.TcpServer.ReturnValue <ulong>, bool> onWrite, File file)
     : base(ref buffer, onWrite)
 {
     this.file = file;
     Index     = buffer.Index;
 }
Exemple #9
0
 /// <summary>
 /// 添加数据
 /// </summary>
 /// <param name="buffer">数据</param>
 /// <param name="onWrite">添加数据回调委托</param>
 /// <param name="file">文件块</param>
 internal FileWriteRequest(ref AppendBuffer buffer, AutoCSer.Net.TcpServer.ServerCallback <ulong> onWrite, File file)
     : base(ref buffer, onWrite)
 {
     this.file = file;
     Index     = buffer.Index;
 }