Esempio n. 1
0
        public override bool Receive(int len)
        {
            var headDelta = 0;

            if (!HeadRecv)
            {
                HeadRecv = true;
                if (BufferLen < Config.GramSize)
                {
                    return(false);
                }
                Gram      = ProtoGram.FromByteArray(Buffer);
                headDelta = Gram.Size;
            }
            if (RecvStream == null)
            {
                switch (Gram.Command)
                {
                case ProtoCommand.List:
                case ProtoCommand.Head:
                    RecvStream = new MemoryStream();
                    break;

                case ProtoCommand.Get:
                    RecvStream = Fs.Put(FileName);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            RecvStream?.Write(Buffer, headDelta, len - headDelta);
            return(true);
        }
Esempio n. 2
0
        public override object Complete()
        {
            if (RecvStream == null)
            {
                return(base.Complete());
            }
            switch (Gram.Command)
            {
            case ProtoCommand.List:
                if (Gram.Status == ProtoStatus.Success)
                {
                    Result = Helper.DeserializeStream <FsInfo[]>(RecvStream);
                }
                RecvStream.Close();
                break;

            case ProtoCommand.Head:
                if (Gram.Status == ProtoStatus.Success)
                {
                    Result = Helper.DeserializeStream <FsInfo>(RecvStream);
                }
                RecvStream.Close();
                break;

            case ProtoCommand.Get:
                Fs.Release(RecvStream);
                Result = (Gram.Status == ProtoStatus.Success);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(base.Complete());
        }
Esempio n. 3
0
 public override void Send()
 {
     BufferLen = 0;
     base.Send();
     if (Gram.Status == (byte)ProtoStatus.Success)
     {
         long size = Config.BufferSize - BufferLen;
         size       = Math.Min(FileLength - RecvStream.Position + Gram.Start, size);
         BufferLen += RecvStream.Read(this.Buffer, BufferLen, (int)size);
     }
 }