Code: Select all
EnableExplicit
Enumeration ;Windows
#Main
EndEnumeration
Enumeration ;Gadgets
#Main_Adress
#Main_Debugger
#Main_Connect
EndEnumeration
OpenWindow(#Main,#False,#False,600,400,"PureDC",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Main))
StringGadget(#Main_Adress,5,5,240,20,"battlestar.5star-net.com:1411")
ButtonGadget(#Main_Connect,250,5,55,20,"Connect")
EditorGadget(#Main_Debugger,5,30,300,200,#PB_Editor_ReadOnly)
Global WindowEvent.l, NetworkEvent.l, ServerID.l
Global BufferLength.l = 1000, *Buffer = AllocateMemory(BufferLength)
If InitNetwork() = #False
MessageRequester("Warning!","Can't initialize network!",#MB_ICONWARNING)
End
EndIf
Declare.s LockToKey(StrLock.s)
Procedure ConnectToServer()
Protected Adress.s = StringField(GetGadgetText(#Main_Adress),1,":")
Protected Port.s = StringField(GetGadgetText(#Main_Adress),2,":")
ServerID = OpenNetworkConnection(Adress,Val(Port))
If ServerID = #False
MessageRequester("Warning!","Connection failed!",#MB_ICONWARNING)
EndIf
EndProcedure
Procedure SendNetworkString2(ID.l,String.s)
SendNetworkString(ID,String)
AddGadgetItem(#Main_Debugger,-1,FormatDate("%hh:%ii:%ss",Date())+": --> "+String)
EndProcedure
Procedure CommandParser()
Protected DataLength.l, String.s, Part.s, i.l
DataLength = ReceiveNetworkData(ServerID,*Buffer,BufferLength)
String = PeekS(*Buffer,DataLength)
For i=1 To CountString(String,"|")
Part = StringField(String,i,"|")
AddGadgetItem(#Main_Debugger,-1,FormatDate("%hh:%ii:%ss",Date())+": <-- "+Part+"|")
Select StringField(Part,1," ")
Case "$Lock"
SendNetworkString2(ServerID,"$Key "+LockToKey(StringField(Part,2," "))+"|")
Debug StringField(Part,2," ")
SendNetworkString2(ServerID,"$ValidateNick PureDCDevTest|")
Case "$HubName"
Case "$Hello"
EndSelect
Next
EndProcedure
Repeat
WindowEvent = WindowEvent()
If ServerID <> 0
NetworkEvent = NetworkClientEvent(ServerID)
EndIf
If WindowEvent=#False And NetworkEvent=#False
Delay(2)
Continue
EndIf
Select WindowEvent
Case #PB_Event_CloseWindow: Break
Case #PB_Event_SizeWindow
Case #PB_Event_Gadget
Select EventGadget()
Case #Main_Connect
ConnectToServer()
EndSelect
EndSelect
Select NetworkEvent
Case #PB_NetworkEvent_Data
CommandParser()
EndSelect
ForEver
If ServerID <> 0
CloseNetworkConnection(ServerID)
EndIf
Procedure.s LockToKey(StrLock.s)
Protected TLock2Key.s
Protected TChar.l
Protected Result.s, i.l
If Len(StrLock) < 3
ProcedureReturn Left("BROKENCLIENT", Len(StrLock))
EndIf
TLock2Key = Chr( (Asc(Left(StrLock, 1)) ! Asc(Right(StrLock, 1))) ! (Asc(Mid(StrLock, Len(StrLock) - 1, 1)) ! 5))
For i = 2 To Len(StrLock)
TLock2Key = TLock2Key + Chr(Asc(Mid(StrLock, i, 1)) ! Asc(Mid(StrLock, i - 1, 1)) )
Next i
For i = 1 To Len(TLock2Key)
TChar = Asc(Mid(TLock2Key, i, 1))
TChar = (TChar * 16) + (TChar / 16)
TChar = TChar % 256
If TChar = 0 Or TChar = 5 Or TChar = 36 Or TChar = 96 Or TChar = 124 Or TChar = 126
result + "/%DCN" + Right("000" + Str(TChar), 3) + "%/"
Else
result + Chr(TChar)
EndIf
Next
ProcedureReturn result
EndProcedure