Esempio n. 1
0
 void OpenFile()
 {
     stream.DisableWriting();
     Libeio.Libeio.open(fileName, OpenFlags.O_RDONLY, FilePermissions.ALLPERMS, (fd, err) => {
         if (fd == -1)
         {
             OnComplete(-1, err);
         }
         else
         {
             this.fd = fd;
             stream.EnableWriting();
             HandleWrite(stream);
         }
     });
 }
Esempio n. 2
0
 protected void SendNextBlock()
 {
     stream.DisableWriting();
     Libeio.read(fd, transferBuffer, position, transferBuffer.Length, (len, buf, err) =>
     {
         if (position == Length)
         {
             OnComplete(len, err);
         }
         if (len > 0)
         {
             position          += len;
             currentPrefixBlock = new SendBytesOperation(new[] {
                 new ByteBuffer(transferBuffer, 0, len)
             }, null);
             currentPrefixBlock.BeginWrite(stream);
         }
         else
         {
             OnComplete(len, err);
         }
         stream.EnableWriting();
     });
 }
Esempio n. 3
0
 public void HandleWrite(IIOStream stream)
 {
     this.stream = (ISocketStream)stream;
     if (currentPrefixBlock != null && !currentPrefixBlock.IsComplete)
     {
         currentPrefixBlock.HandleWrite(stream);
         if (currentPrefixBlock.IsComplete)
         {
             currentPrefixBlock.EndWrite(stream);
             currentPrefixBlock.Dispose();
             currentPrefixBlock = null;
         }
     }
     if (fd == -1)
     {
         OpenFile();
     }
     else if (Length == -1)
     {
         if (!Chunked)
         {
             stream.DisableWriting();
         }
         else
         {
             InitializeTransfer();
         }
     }
     else if (position != Length)
     {
         SendNextBlock();
     }
     else
     {
         OnComplete(0, 0);
     }
 }
Esempio n. 4
0
 public void HandleWrite(IIOStream stream)
 {
     this.stream = (ISocketStream) stream;
     if (currentPrefixBlock != null && !currentPrefixBlock.IsComplete) {
         currentPrefixBlock.HandleWrite (stream);
         if (currentPrefixBlock.IsComplete) {
             currentPrefixBlock.EndWrite (stream);
             currentPrefixBlock.Dispose ();
             currentPrefixBlock = null;
         }
     }
     if (fd == -1) {
         OpenFile ();
     } else if (Length == -1) {
         if (!Chunked) {
             stream.DisableWriting ();
         } else {
             InitializeTransfer ();
         }
     } else if (position != Length) {
         SendNextBlock ();
     } else {
         OnComplete (0, 0);
     }
 }