#Region " Private Functions/Subs "
Private Sub ChangeState(ByVal new_state As WinsockStates)
_State = new_state
RaiseEvent StateChanged(Me, _State)
End Sub
Private Sub OnConnected(ByVal asyn As IAsyncResult)
Try
_Client.EndConnect(asyn)
Me.ClientFinalizeConnection()
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub ClientFinalizeConnection()
ChangeState(WinsockStates.Connected)
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, AddressOf _
DoRead, Nothing)
RaiseEvent Connected(Me)
End Sub
Private Sub DoListen()
Try
_sockList = New Socket(AddressFamily.InterNetwork, _
SocketType.Stream, ProtocolType.Tcp)
Dim ipLocal As New IPEndPoint(IPAddress.Any, LocalPort)
_sockList.Bind(ipLocal)
_sockList.Listen(1)
ChangeState(WinsockStates.Listening)
_sockList.BeginAccept(New AsyncCallback(AddressOf OnClientConnect), _
Nothing)
Catch ex As Exception
Me.Close()
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub OnClientConnect(ByVal asyn As IAsyncResult)
Try
Dim tmpSock As Socket
If GetState = WinsockStates.Listening Then
tmpSock = _sockList.EndAccept(asyn)
RaiseEvent ConnectionRequest(Me, tmpSock)
_sockList.BeginAccept(New AsyncCallback(AddressOf _
OnClientConnect), Nothing)
End If
Catch ex As Exception
Me.Close()
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Private Sub DoStreamReceive(ByVal ar As IAsyncResult)
Dim intCount As Integer
Try
SyncLock _Client
intCount = _Client.EndReceive(ar)
End SyncLock
If intCount < 1 Then
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
Exit Sub
End If
AddToBuffer(_byteBuffer, intCount)
'BuildString(_byteBuffer, 0, intCount)
Array.Clear(_byteBuffer, 0, intCount)
SyncLock _Client
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, _
AddressOf DoStreamReceive, Nothing)
End SyncLock
Catch ex As Exception
Me.Close()
ReDim _byteBuffer(1024)
RaiseEvent Disconnected(Me)
End Try
End Sub |