From 751052acbc0fa042e5d726e43bbc98df784018cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=93=E3=81=AE=E4=B8=AD=E4=BA=8C=E7=97=85=E3=81=AB?= =?UTF-8?q?=E7=88=86=E7=84=94=E3=82=92=EF=BC=81?= Date: Wed, 13 Jan 2021 09:19:11 +0800 Subject: [PATCH] data services --- Parallel/IPCSocket.vb | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Parallel/IPCSocket.vb b/Parallel/IPCSocket.vb index 2e9076d..be097ff 100644 --- a/Parallel/IPCSocket.vb +++ b/Parallel/IPCSocket.vb @@ -1,13 +1,14 @@ Imports System.IO +Imports System.Text Imports Microsoft.VisualBasic.ComponentModel +Imports Microsoft.VisualBasic.Net.Protocols.Reflection Imports Microsoft.VisualBasic.Net.Tcp Imports Microsoft.VisualBasic.Parallel + Public Class IPCSocket : Implements ITaskDriver - ReadOnly socket As New TcpServicesSocket(GetFirstAvailablePort) With { - .ResponseHandler = AddressOf DataRequestHandler - } + ReadOnly socket As New TcpServicesSocket(GetFirstAvailablePort) Public ReadOnly Property HostPort As Integer Get @@ -20,13 +21,33 @@ Public Class IPCSocket : Implements ITaskDriver Public Property handleGetArgument As Func(Of Integer, Stream) Sub New() + socket.ResponseHandler = AddressOf New ProtocolHandler(Me).HandleRequest End Sub Public Function Run() As Integer Implements ITaskDriver.Run Return socket.Run End Function - Private Function DataRequestHandler(request As RequestStream, remoteAddress As System.Net.IPEndPoint) As BufferPipe + + Public Function GetArgumentByIndex(request As RequestStream, remoteAddress As System.Net.IPEndPoint) As BufferPipe + Dim i As Integer = BitConverter.ToInt32(request.ChunkBuffer, Scan0) + Dim buf As Stream = _handleGetArgument(i) + Dim pipe As New StreamPipe(buf) + Return pipe + End Function + + + Public Function GetArgumentNumber(request As RequestStream, remoteAddress As System.Net.IPEndPoint) As BufferPipe + Return New DataPipe(BitConverter.GetBytes(nargs)) + End Function + + + Public Function PostResult(request As RequestStream, remoteAddress As System.Net.IPEndPoint) As BufferPipe + Using ms As New MemoryStream(request.ChunkBuffer) + Call _handlePOSTResult(ms) + End Using + + Return New DataPipe(Encoding.ASCII.GetBytes("OK!")) End Function End Class