1 #Region "Microsoft.VisualBasic::ab725b3d41c5ffacbb9827e44c039ef8, Microsoft.VisualBasic.Core\ApplicationServices\Tools\Network\Tcp\Persistent\Protocols\Protocol.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     '     Module ServicesProtocol
35     
36     
37     '         Enum Protocols
38     
39     '             Broadcast, ConfigConnection, GetMyIPAddress, IsUserOnline, SendMessage
40     '             ServerHash
41     
42     
43     
44     '  
45     
46     '     Properties: ProtocolEntry
47     
48     '     Function: BroadcastMessage, GetLogOnUSER, GetSendMessage, GetServicesConnection, IsUserOnlineRequest
49     '               LogOnRequest, SendMessageRequest, SendServerHash
50     
51     
52     ' /********************************************************************************/
53
54 #End Region
55
56 Imports System.Net.Sockets
57 Imports System.Threading
58 Imports System.Xml.Serialization
59 Imports Microsoft.VisualBasic.Net.Protocols.Reflection
60 Imports Microsoft.VisualBasic.Net.Protocols
61
62 Namespace Net.Persistent.Application.Protocols
63
64     Public Module ServicesProtocol
65
66         Public Enum Protocols As Long
67             Logon = 59867
68             ServerHash
69             SendMessage
70             ConfigConnection
71             IsUserOnline
72             GetMyIPAddress
73             Broadcast
74         End Enum
75
76         Public ReadOnly Property ProtocolEntry As Long =
77             New Protocol(GetType(Protocols)).EntryPoint
78
79         Public Function SendServerHash(hash As IntegerAs RequestStream
80             Return New RequestStream(ProtocolEntry, Protocols.ServerHash, CStr(hash))
81         End Function
82
83         Public Const WorkSocketPortal As Integer = 66982
84
85         Public Function LogOnRequest(USER_ID As Long, Socket As StringAs RequestStream
86             Dim post As String = New LogonPOST With {
87                 .Socket = Socket,
88                 .USER_ID = USER_ID
89             }.GetXml
90             Return New RequestStream(ProtocolEntry, Protocols.Logon, post)
91         End Function
92
93         Public Function GetLogOnUSER(request As StringByRef USER_ID As LongByRef Socket As StringAs Boolean
94             Dim post As LogonPOST = request.LoadFromXml(Of LogonPOST)(False)
95
96             If post Is Nothing Then
97                 Return False
98             Else
99                 USER_ID = post.USER_ID
100                 Socket = post.Socket
101
102                 Return USER_ID <> 0 AndAlso Not String.IsNullOrEmpty(Socket)
103             End If
104         End Function
105
106         Public Function SendMessageRequest([FROM] As Long, USER_ID As LongMessage As RequestStream) As RequestStream
107             Dim post As New SendMessagePost With {
108                 .FROM = FROM,
109                 .Message = Message,
110                 .USER_ID = USER_ID
111             }
112             Return New RequestStream(ProtocolEntry, Protocols.SendMessage, post.Serialize)
113         End Function
114
115         Public Function GetSendMessage(request As RequestStream, ByRef [FROM] As LongByRef USER_ID As LongAs Boolean
116             Dim post As SendMessagePost = New SendMessagePost(request.ChunkBuffer)
117
118             [FROM] = post.FROM
119             USER_ID = post.USER_ID
120
121             Return True
122         End Function
123
124         Public Function GetServicesConnection() As RequestStream
125             Return New RequestStream(ProtocolEntry, Protocols.ConfigConnection, "GET")
126         End Function
127
128         Public Function IsUserOnlineRequest(USER_ID As LongAs RequestStream
129             Return New RequestStream(ProtocolEntry, Protocols.IsUserOnline, CStr(USER_ID))
130         End Function
131
132         Public Function BroadcastMessage(USER_ID As LongMessage As RequestStream) As RequestStream
133             Dim post As New BroadcastPOST With {
134                 .Message = Message,
135                 .USER_ID = USER_ID
136             }
137             Return New RequestStream(ProtocolEntry, Protocols.Broadcast, post.Serialize) With {
138                 .uid = USER_ID
139             }
140         End Function
141     End Module
142 End Namespace