#Region "Microsoft.VisualBasic::feb839fe206c8518a09ae7577064ddbf, Parallel\IpcParallel\SocketBuffer\SocketRef.vb"
' Author:
'
' asuka (amethyst.asuka@gcmodeller.org)
' xie (genetics@smrucc.org)
' xieguigang (xie.guigang@live.com)
'
' Copyright (c) 2018 GPL3 Licensed
'
'
' GNU GENERAL PUBLIC LICENSE (GPL3)
'
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see .
' /********************************************************************************/
' Summaries:
' Class SocketRef
'
' Properties: address
'
' Function: CreateReference, GetSocket, Open, ToString, WriteBuffer
'
'
' /********************************************************************************/
#End Region
Imports System.IO
Imports System.Runtime.CompilerServices
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
Public Shared Narrowing Operator CType(socket As SocketRef) As String
Return socket.address
End Operator
End Class
End Namespace