1 #Region "Microsoft.VisualBasic::f3a193afddbcff83821427cf7f4463d0, Microsoft.VisualBasic.Core\ApplicationServices\Tools\Network\Protocol\Reflection\ProtocolInvoker.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class __protocolInvoker
35     
36     '         Constructor: (+1 OverloadsSub New
37     '         FunctionInvokeProtocol0, InvokeProtocol1, InvokeProtocol2, InvokeProtocol3, ToString
38     
39     
40     ' /********************************************************************************/
41
42 #End Region
43
44 Imports System.Reflection
45 Imports Microsoft.VisualBasic.Net.Http
46 Imports Microsoft.VisualBasic.Win32
47
48 Namespace Net.Protocols.Reflection
49
50     Friend Class __protocolInvoker
51
52         ReadOnly obj As ObjectMethod As MethodInfo
53
54         Sub New(obj As ObjectMethod As MethodInfo)
55             Me.obj = obj
56             Me.Method = Method
57         End Sub
58
59         Public Function InvokeProtocol0(CA As Long, request As RequestStream, remoteDevice As System.Net.IPEndPoint) As RequestStream
60             Dim value = Method.Invoke(obj, Nothing)
61             Dim data = DirectCast(value, RequestStream)
62             Return data
63         End Function
64
65         Public Function InvokeProtocol1(CA As Long, request As RequestStream, remoteDevice As System.Net.IPEndPoint) As RequestStream
66             Dim value = Method.Invoke(obj, {CA})
67             Dim data = DirectCast(value, RequestStream)
68             Return data
69         End Function
70
71         Public Function InvokeProtocol2(CA As Long, request As RequestStream, remoteDevice As System.Net.IPEndPoint) As RequestStream
72             Dim value = Method.Invoke(obj, {CA, request})
73             Dim data = DirectCast(value, RequestStream)
74             Return data
75         End Function
76
77         ''' <summary>
78         ''' 
79         ''' </summary>
80         ''' <param name="CA"><see cref="SSL.Certificate.uid"/></param>
81         ''' <param name="request"></param>
82         ''' <param name="remoteDevice"></param>
83         ''' <returns></returns>
84         Public Function InvokeProtocol3(CA As Long, request As RequestStream, remoteDevice As System.Net.IPEndPoint) As RequestStream
85             Try
86                 Dim value = Method.Invoke(obj, {CA, request, remoteDevice})
87                 Dim data = DirectCast(value, RequestStream)
88                 Return data
89             Catch ex As Exception
90                 ex = New Exception(Method.FullName, ex)
91
92                 If WindowsServices.Initialized Then
93                     Call ServicesLogs.LogException(ex)
94                 Else
95                     Call App.LogException(ex)
96                 End If
97                 Return NetResponse.RFC_UNKNOWN_ERROR
98             End Try
99         End Function
100
101         Public Overrides Function ToString() As String
102             Return $"{obj.ToString} -> {Method.Name}"
103         End Function
104     End Class
105 End Namespace