Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Private s_ServerIn As New IoBuffer
- Private s_ServerOut As New IoBuffer
- Private s_ClientIn As New IoBuffer
- Private s_ClientOut As New IoBuffer
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Public Sub OnServerAccept(ByVal Selector As IoSocketSelectorDecl, ByVal Socket As Long)
- Debug.Print "Server::OnAccept(" + CStr(Socket) + ") " + Selector.GetRemoteAddress(Socket)
- Call Selector.Read(Socket, s_ServerIn.Data, s_ServerIn.Capacity)
- Call Selector.Write(Socket, s_ServerOut.Data, s_ServerOut.Capacity)
- End Sub
- Public Sub OnServerDisconnect(ByVal Selector As IoSocketSelectorDecl, ByVal Socket As Long, ByVal Reason As Long)
- Debug.Print "Server::OnDisconnect(" + CStr(Reason) + ")"
- s_ServerIn.Reset: s_ServerOut.Reset
- End Sub
- Public Sub OnServerError(ByVal Selector As IoSocketSelectorDecl, ByVal Reason As Long)
- Debug.Print "Server::OnError(" + CStr(Reason) + ")"
- End Sub
- Public Sub OnServerRead(ByVal Selector As IoSocketSelectorDecl, ByVal Socket As Long, ByVal Length As Long)
- Debug.Print "Server::OnRead(" + CStr(Length) + ")"
- Call s_ClientIn.Commit(Length)
- ' Parser in here
- Call s_ClientIn.Consume(Length) ' Skip
- Call Selector.Read(Socket, s_ServerIn.Data, s_ServerOut.Capacity)
- s_Incoming = s_Incoming + Length
- End Sub
- Public Sub OnServerWrite(ByVal Selector As IoSocketSelectorDecl, ByVal Socket As Long, ByVal Length As Long)
- Debug.Print "Server::OnWrite(" + CStr(Length) + ")"
- Call Selector.Write(Socket, s_ServerIn.Data, s_ServerOut.Capacity)
- s_Outgoing = s_Outgoing + Length
- End Sub
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Public Sub OnClientConnect(ByVal Socket As IoSocketDecl)
- Debug.Print "OnClientConnect"
- Call Socket.Write(s_ClientOut.Data, s_ClientOut.Capacity)
- Call Socket.Read(s_ClientIn.Data, 1)
- End Sub
- Public Sub OnClientDisconnect(ByVal Socket As IoSocketDecl, ByVal Reason As Long)
- Debug.Print "OnClientDisconnect"
- End Sub
- Public Sub OnClientRead(ByVal Socket As IoSocketDecl, ByVal Length As Long)
- Call s_ClientIn.Commit(Length)
- ' Parser in here
- Call s_ClientIn.Consume(Length) ' Skip
- Call Socket.Read(s_ClientIn.Data, s_ClientIn.Capacity)
- End Sub
- Public Sub OnClientWrite(ByVal Socket As IoSocketDecl, ByVal Length As Long)
- Debug.Print "Write(" + CStr(Length) + ")"
- Call Socket.Write(s_ClientOut.Data, s_ClientOut.Capacity)
- End Sub
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Public Sub Main()
- s_ClientOut.Capacity = 64000
- Dim Selector As New IoSocketSelector
- Selector.OnAccept AddressOf OnServerAccept
- Selector.OnDisconnect AddressOf OnServerDisconnect
- Selector.OnError AddressOf OnServerError
- Selector.OnRead AddressOf OnServerRead
- Selector.OnWrite AddressOf OnServerWrite
- Selector.Listen 7666
- Dim Client(0 To 99) As New IoSocket
- For I = 0 To 99
- Client(I).OnConnect AddressOf OnClientConnect
- Client(I).OnDisconnect AddressOf OnClientDisconnect
- Client(I).OnRead AddressOf OnClientRead
- Client(I).OnWrite AddressOf OnClientWrite
- Client(I).Connect "190.0.163.20", 7668
- Next I
- While (True)
- DoEvents
- Call Io.Poll(True)
- Wend
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement