Imports System.IO
Imports Microsoft.VisualBasic.MIME.application.json.BSON
Namespace IpcStream
Public Class SocketRef
Public Property address As String
'''
''' buffered object is
'''
'''
'''
'''
Public Shared Function WriteBuffer(target As Object, Optional emit As StreamEmit = Nothing) As SocketRef
Dim stream As ObjectStream
Dim ref As SocketRef = CreateReference()
If emit Is Nothing Then
stream = New StreamEmit().handleSerialize(target)
Else
stream = emit.handleSerialize(target)
End If
Using file As Stream = ref.address.Open(FileMode.OpenOrCreate, doClear:=True, [readOnly]:=False)
Call stream.Serialize(file)
Call stream.Dispose()
End Using
Return ref
End Function
Public Function Open() As ObjectStream
Using file As Stream = address.Open(FileMode.Open, doClear:=False, [readOnly]:=True)
Return New ObjectStream(file)
End Using
End Function
Public Overrides Function ToString() As String
Return address
End Function
Public Shared Function GetSocket(stream As ObjectStream) As SocketRef
Using file As Stream = stream.openMemoryBuffer
Return BSONFormat.Load(file).CreateObject(GetType(SocketRef))
End Using
End Function
Public Shared Function CreateReference() As SocketRef
Return App.GetAppSysTempFile(".sock", App.PID.ToHexString, prefix:="Parallel")
End Function
Public Shared Widening Operator CType(ref As String) As SocketRef
Return New SocketRef With {.address = ref}
End Operator
End Class
End Namespace