Imports System.IO
Imports Microsoft.VisualBasic.Net.Protocols
Imports Microsoft.VisualBasic.Net.Protocols.Reflection
Imports Microsoft.VisualBasic.Serialization
Namespace FileSystem.Protocols
Public Class RenameArgs
Public Property old As String
Public Property [New] As String
End Class
Public Class DeleteArgs
Public Property obj As String
Public Property [option] As Integer
End Class
'''
''' Initializes a new instance of the System.IO.FileStream class with the specified
''' path and creation mode.
'''
Public Class FileOpen : Inherits FileHandle
'''
''' Specifies how the operating system should open a file.
'''
'''
Public Property Mode As Integer
Public Property Access As Integer = FileAccess.Read
Public Overrides Function ToString() As String
Return $"[{DirectCast(Mode, FileMode).ToString }] " & FileName.ToFileURL
End Function
'''
''' Initializes a new instance of the System.IO.FileStream class with the specified
''' path and creation mode.
'''
Public Function OpenHandle() As FileStream
Dim mode As FileMode = DirectCast(Me.Mode, FileMode)
Dim access As FileAccess = DirectCast(Me.Access, FileAccess)
Return New FileStream(FileName, mode, access)
End Function
End Class
Public Class ReadBuffer : Inherits FileHandle
Implements IReadWriteBuffer
Public Property offset As Integer Implements IReadWriteBuffer.offset
'''
''' 输入的参数的长度
'''
'''
Public Property length As Integer Implements IReadWriteBuffer.length
Sub New()
End Sub
Sub New(handle As FileHandle)
Call MyBase.New(handle)
End Sub
Public Function CreateBuffer() As Byte()
Return CreateBuffer(Me)
End Function
Public Shared Function CreateBuffer(op As IReadWriteBuffer) As Byte()
Dim buffer As Byte() = New Byte(op.length + op.offset - 1) {}
Return buffer
End Function
End Class
Public Interface IReadWriteBuffer
Property offset As Integer
Property length As Integer
End Interface
Public Class WriteStream : Inherits RawStream
Implements IReadWriteBuffer
Public Property Handle As FileHandle
Public Property length As Integer Implements IReadWriteBuffer.length
Public Property offset As Integer Implements IReadWriteBuffer.offset
Public Property buffer As Byte()
Sub New()
End Sub
Sub New(raw As Byte())
Dim buf As Byte() = New Byte(INT32 - 1) {}
Dim p As Integer = Scan0
Dim handleLen As Integer
Dim bufferLen As Integer
Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : length = BitConverter.ToInt32(buf, Scan0)
Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : offset = BitConverter.ToInt32(buf, Scan0)
Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : handleLen = BitConverter.ToInt32(buf, Scan0)
Call Array.ConstrainedCopy(raw, p.Move(INT32), buf, Scan0, INT32) : bufferLen = BitConverter.ToInt32(buf, Scan0)
buf = New Byte(handleLen - 1) {}
Call Array.ConstrainedCopy(raw, p.Move(handleLen), buf, Scan0, handleLen)
Dim json As String = System.Text.Encoding.UTF8.GetString(buf)
Handle = json.LoadObject(Of FileHandle)
buffer = New Byte(bufferLen - 1) {}
Call Array.ConstrainedCopy(raw, p, buffer, Scan0, bufferLen)
End Sub
Public Overrides Function Serialize() As Byte()
Dim handle As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.Handle.GetJson)
Dim length As Byte() = BitConverter.GetBytes(Me.length)
Dim offset As Byte() = BitConverter.GetBytes(Me.offset)
Dim chunkBuffer As Byte() = New Byte(INT32 + ' length
INT32 + ' offset
INT32 + ' handle length
INT32 + ' buffer length
handle.Length +
buffer.Length - 1) {}
Dim p As Integer = Scan0
Dim handleLen As Byte() = BitConverter.GetBytes(handle.Length)
Dim bufferLen As Byte() = BitConverter.GetBytes(buffer.Length)
Call Array.ConstrainedCopy(length, Scan0, chunkBuffer, p.Move(INT32), INT32)
Call Array.ConstrainedCopy(offset, Scan0, chunkBuffer, p.Move(INT32), INT32)
Call Array.ConstrainedCopy(handleLen, Scan0, chunkBuffer, p.Move(INT32), INT32)
Call Array.ConstrainedCopy(bufferLen, Scan0, chunkBuffer, p.Move(INT32), INT32)
Call Array.ConstrainedCopy(handle, Scan0, chunkBuffer, p.Move(handle.Length), handle.Length)
Call Array.ConstrainedCopy(buffer, Scan0, chunkBuffer, p, buffer.Length)
Return chunkBuffer
End Function
Public Function CreateBuffer() As Byte()
Return ReadBuffer.CreateBuffer(Me)
End Function
End Class
Public Class FileStreamPosition : Inherits FileHandle
Public Const [GET] As Long = -100
'''
''' -100表示获取
'''
'''
Public Property Position As Long = [GET]
Sub New(handle As FileHandle)
Call MyBase.New(handle)
End Sub
Sub New()
End Sub
End Class
End Namespace