1 #Region "Microsoft.VisualBasic::0516875fb66aa9a14530fd5b66117259, Microsoft.VisualBasic.Core\ApplicationServices\Tools\Network\Tcp\StateObject.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 StateObject
35     
36     '         FunctionGetRequest, ToString
37     
38     '         Sub: (+2 Overloads) Dispose
39     
40     
41     ' /********************************************************************************/
42
43 #End Region
44
45 Imports System.Net.NetworkInformation
46 Imports System.Net
47 Imports System.Net.Sockets
48 Imports System.Text
49 Imports Microsoft.VisualBasic.Net.Protocols
50
51 Namespace Net
52
53     ''' <summary>
54     ''' State object for reading client data asynchronously
55     ''' </summary>
56     ''' <remarks></remarks>
57     Public Class StateObject : Implements System.IDisposable
58
59         ''' <summary>
60         ''' Client  socket.
61         ''' </summary>
62         ''' <remarks></remarks>
63         Public workSocket As Socket
64         ''' <summary>
65         ''' Size of receive buffer.
66         ''' </summary>
67         ''' <remarks></remarks>
68         Public Const BufferSize As Integer = 1024 * 1024
69         ''' <summary>
70         ''' Receive buffer.
71         ''' </summary>
72         ''' <remarks></remarks>
73         Public readBuffer(BufferSize) As Byte
74         ''' <summary>
75         ''' Received data.
76         ''' </summary>
77         ''' <remarks></remarks>
78         Public ChunkBuffer As New List(Of Byte)
79
80         Public Overrides Function ToString() As String
81             Return workSocket.RemoteEndPoint.ToString & " <=====> " & workSocket.LocalEndPoint.ToString
82         End Function
83
84         Public Function GetRequest() As RequestStream
85             Return New RequestStream(ChunkBuffer.ToArray)
86         End Function
87
88 #Region "IDisposable Support"
89         Protected disposedValue As Boolean To detect redundant calls
90
91         ' IDisposable
92         Protected Overridable Sub Dispose(disposing As Boolean)
93             If Not disposedValue Then
94                 If disposing Then
95
96                     On Error Resume Next
97
98                     Dim ep As String = workSocket.RemoteEndPoint.ToString
99
100                     ' TODO: dispose managed state (managed objects).
101                     Call ChunkBuffer.Clear()
102                     Call ChunkBuffer.Free
103                     Call readBuffer.Free
104                     Call workSocket.Shutdown(SocketShutdown.Both)
105                     Call workSocket.Free
106
107                     Call Console.WriteLine($"[DEBUG {Now.ToString}] Socket {ep} clean up!")
108                 End If
109
110                 ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
111                 ' TODO: set large fields to null.
112             End If
113             disposedValue = True
114         End Sub
115
116         ' TODO: override Finalize() only if Dispose(disposing As Boolean) above has code to free unmanaged resources.
117         'Protected Overrides Sub Finalize()
118         '    ' Do not change this code.  Put cleanup code in Dispose(disposing As Boolean) above.
119         '    Dispose(False)
120         '    MyBase.Finalize()
121         'End Sub
122
123         ' This code added by Visual Basic to correctly implement the disposable pattern.
124         Public Sub Dispose() Implements IDisposable.Dispose
125             Do not change this code.  Put cleanup code in Dispose(disposing As Boolean) above.
126             Dispose(True)
127             ' TODO: uncomment the following line if Finalize() is overridden above.
128             ' GC.SuppressFinalize(Me)
129         End Sub
130 #End Region
131     End Class
132 End Namespace