This one is more hackable than my first entry.
Novice PB users may find it interesting to add smileys, avatars, or IP address retrieval.
How about changing the room's decor?
More knowledgeable programmers might add file transfers, expand the number of guests, and guest booting.
I'm thinking about adding some primitive VoIP capability to enhance my online gaming environment.
To access a built-in smiley ☺ (☻), while typing, press Alt+1 (Alt+2) from the keypad.
Code: Select all
; ********************************
; ********* ESChat 1.0 *********
; ****** January 30, 2015 ******
; **** ELECTRONICAL SOFTWARE ****
; ********************************
#BUFLEN= 256 : *INBUFFER = AllocateMemory(#BUFLEN)
Dim SLINES$(23) : FS1= 12 : FS2= 24
InitSprite()
OpenWindow(0,0,0,800,600,"ESChat",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
;; NO CAN DO IN DEMO, SO USERS WHO HAVE CHANGED THEIR DESKTOP FONT SIZE WILL HAVE THE TEXT SIZE ALTERED ACCORDINGLY.
;;CompilerIf #PB_Compiler_OS=#PB_OS_Windows
;; DPI= GetDeviceCaps_(GetDC_(0),#LOGPIXELSX)
;; If DPI <> 96 And DPI > 15 And DPI < 193 : FS1= (FS1*100)/DPI : FS2= (FS2*100)/DPI : EndIf
;;CompilerEndIf
LoadFont(1,"Arial",FS1,#PB_Font_HighQuality)
LoadFont(2,"Arial",FS2,#PB_Font_Bold|#PB_Font_HighQuality)
LoadFont(3,"Arial",FS1,#PB_Font_Bold|#PB_Font_HighQuality)
OpenWindowedScreen(WindowID(0),0,0,800,600,#True,0,0) : CreateSprite(0,800,600)
InitKeyboard() : InitNetwork()
REFRESH= 2 : BYEBYE= 0 : CHAT= 0 : NUMLINES= 0 : FLASH= 0 : RESEND= 0
PORT= 6532 : HOSTID= 0 : CLIENTID1= 0 : CLIENTID2= 0 : CLIENTID3= 0
HOST$= "" : GUEST1$= "" : GUEST2$= "" : GUEST3$= "" : OTHERG1$= "" : OTHERG2$= ""
BLANK$= " "
FILESAV$= "Press Ctrl+S at any time to save the current chat text display into a file."
Repeat
RELEASE= ElapsedMilliseconds()+ 20
Repeat : X= WindowEvent() : If X = #PB_Event_CloseWindow : End : EndIf : Until X = 0
If REFRESH
StartDrawing(SpriteOutput(0)) : DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(2)) : Box(0,0,800,600,$000000)
If CHAT > 99 Or FULL
If HOST
If FLASH
DBUFF$= FLASH$
Else
DBUFF$= "* HOSTING CHAT SESSION *"
EndIf
DrawText(400-TextWidth(DBUFF$)/2,20,DBUFF$,$FFDD77)
If Not FLASH And (GUEST1$ Or GUEST1$ Or GUEST3$)
IND= 180 : DrawingFont(FontID(3))
If GUEST1$ : DrawText(IND-TextWidth(GUEST1$)/2,2,GUEST1$,$22DD22) : IND +220 : EndIf
If GUEST2$ : DrawText(IND-TextWidth(GUEST2$)/2,2,GUEST2$,$22DD22) : IND +220 : EndIf
If GUEST3$ : DrawText(IND-TextWidth(GUEST3$)/2,2,GUEST3$,$22DD22) : EndIf
DrawingFont(FontID(2))
EndIf
Else
If FLASH
DBUFF$= FLASH$
Else
If FULL
FULL= 0 : DBUFF$= ""
Else
DBUFF$= "* IN CHAT SESSION *"
EndIf
EndIf
DrawText(400-TextWidth(DBUFF$)/2,17,DBUFF$,$FFDD77)
If Not FLASH
IND= 180 : DrawingFont(FontID(3))
DrawText(IND-TextWidth(HOST$)/2,2,HOST$,$22DD22) : IND +220
If OTHERG1$ : DrawText(IND-TextWidth(OTHERG1$)/2,2,OTHERG1$,$22DD22) : IND +220 : EndIf
If OTHERG2$ : DrawText(IND-TextWidth(OTHERG2$)/2,2,OTHERG2$,$22DD22) : EndIf
DrawingFont(FontID(2))
EndIf
EndIf
EndIf
If CHAT < 100 : DrawingFont(FontID(2)) : EndIf
If CHAT > 99
If NUMLINES
Box(20,63,759,449,$444444) : Box(22,65,755,445,$1C1C1C) : DrawingFont(FontID(1))
JND= NUMLINES- 1 : If NUMLINES < 4 : JND= 23 : EndIf
For IND= 0 To JND : DrawText(25,485-IND*18,SLINES$(IND),$00FF00) : Next IND
EndIf
ElseIf CHAT > 19
DBUFF$= "* JOINING CHAT SESSION *" : DrawText(400-TextWidth(DBUFF$)/2,25,DBUFF$,$FFDD77)
If CHAT = 21
DBUFF$= NAME$+", ENTER THE HOST IP ADDRESS." : DrawText(400-TextWidth(DBUFF$)/2,60,DBUFF$,$FFDD77)
ElseIf CHAT = 22
DBUFF$= "CONNECTING TO CHAT HOST @ "+HIP$ : DrawText(400-TextWidth(DBUFF$)/2,60,DBUFF$,$FFDD77)
ElseIf CHAT = 23
DBUFF$= "TRANSFERRING DATA WITH CHAT HOST" : DrawText(400-TextWidth(DBUFF$)/2,60,DBUFF$,$FFDD77)
EndIf
ElseIf CHAT > 9
DBUFF$= "* HOSTING CHAT SESSION *" : DrawText(400-TextWidth(DBUFF$)/2,25,DBUFF$,$FFDD77)
If CHAT = 11
DBUFF$= "AS "+NAME$ : DrawText(400-TextWidth(DBUFF$)/2,60,DBUFF$,$FFDD77)
EndIf
ElseIf Not FULL
DBUFF$= "PRESS H TO HOST CHAT SESSION" : DrawText(400-TextWidth(DBUFF$)/2,125,DBUFF$,$FFDD77)
DBUFF$= "PRESS J TO JOIN CHAT SESSION" : DrawText(400-TextWidth(DBUFF$)/2,250,DBUFF$,$FFDD77)
EndIf
If CHAT > 99 : If NUMLINES : DrawingFont(FontID(2)) : EndIf
If CLIENTID1 Or CLIENTID2 Or CLIENTID3 Or CHAT > 199
DBUFF$= "PRESS ANY KEY TO TYPE A MESSAGE" : DrawText(400-TextWidth(DBUFF$)/2,515,DBUFF$,$AAAAAA)
EndIf
EndIf
DBUFF$= "PRESS Esc KEY TO EXIT CHAT" : DrawText(400-TextWidth(DBUFF$)/2,555,DBUFF$,$AAAAAA)
StopDrawing() : DisplaySprite(0,0,0) : FlipBuffers() : REFRESH= 0
EndIf
If CHAT = 10 Or CHAT = 20 Or CHAT= 21
CompilerIf #PB_Compiler_OS=#PB_OS_Linux
; THE FOLLOWING 3 LINES WILL CLEAR THE STICKY KEYPRESS BUG ASSOCIATED WITH THE LINUX INPUT REQUESTER
ONKEY= 1 : Repeat : Delay(20)
Repeat : X= WindowEvent() : If X = #PB_Event_CloseWindow : End : EndIf : Until X = 0
ExamineKeyboard() : If Not KeyboardPushed(#PB_Key_All) : ONKEY= 0 :EndIf : Until Not ONKEY
CompilerEndIf
If CHAT < 21
NAME$= InputRequester("ESChat","Enter Your Name",UserName())
If NAME$ : CHAT +1 : Else : CHAT= 0 : EndIf
Else
HIP$= InputRequester("ESChat","USE THE IPv4 * . * . * . * ADDRESS FORMAT","")
If CountString(HIP$,".")<>3 Or Len(HIP$)<7 Or Len(HIP$)>15 : HIP$= "" : EndIf
If HIP$ : CHAT= 22 : FL$= KeyboardInkey() : Else : CHAT= 0 : EndIf
EndIf
REFRESH= 1
ElseIf CHAT= 11
Delay(1000)
If CreateNetworkServer(0,PORT)
CHAT= 100 : FULL= 0 : FLASH= ElapsedMilliseconds()+ 2000 : FLASH$= "* CHATROOM CREATED *"
Else
MessageRequester("ESChat","CAN'T CREATE CHATROOM!", 0) : CHAT= 0
EndIf
REFRESH= 1
ElseIf CHAT= 22
HOSTID= OpenNetworkConnection(HIP$,PORT,#PB_Network_TCP,7777)
If HOSTID
CHAT= 23 : FULL= 0 : Delay(1000)
Else
MessageRequester("ESChat","CAN'T FIND HOST AT "+HIP$+"!") : CHAT= 0
EndIf
REFRESH= 1
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
If HOSTID : CloseNetworkConnection(HOSTID) : EndIf
If CLIENTID1 : CloseNetworkConnection(CLIENTID1) : EndIf
If CLIENTID2 : CloseNetworkConnection(CLIENTID2) : EndIf
If CLIENTID3 : CloseNetworkConnection(CLIENTID3) : EndIf
BYEBYE+ 1
ElseIf KeyboardPushed(#PB_Key_LeftControl) Or KeyboardPushed(#PB_Key_RightControl)
If KeyboardPushed(#PB_Key_S) And CHAT > 99 And NUMLINES
TODAY$= FormatDate("%mm/%dd/%yy",Date()) : TIME$= FormatDate("%hh:%ii:%ss",Date())
SAVEFILE$= "ESChat_@"+Mid(TIME$,1,2)+Mid(TIME$,4,2)+Mid(TIME$,7,2)+"_on"
SAVEFILE$= SAVEFILE$+Mid(TODAY$,1,2)+Mid(TODAY$,4,2)+Mid(TODAY$,7,2)+".txt"
OpenFile(113,SAVEFILE$) : For IND= NUMLINES-1 To 0 Step -1 : WriteStringN(113,SLINES$(IND)) : Next IND
CloseFile(113) : ONKEY= 1
Repeat : Delay(20)
Repeat : X= WindowEvent() : If X = #PB_Event_CloseWindow : End : EndIf : Until X = 0
ExamineKeyboard() : If Not KeyboardPushed(#PB_Key_All) : ONKEY= 0 :EndIf
Until Not ONKEY
EndIf
ElseIf KeyboardPushed(#PB_Key_H) And Not CHAT : CHAT= 10 : HOST= 1 : REFRESH= 1
ElseIf KeyboardPushed(#PB_Key_J) And Not CHAT : CHAT= 20 : HOST= 0 : REFRESH= 1
ElseIf CHAT > 99
FL$= KeyboardInkey()
CompilerIf #PB_Compiler_OS=#PB_OS_Linux
If FL$<>"" Or KeyboardPushed(#PB_Key_Return)
If Asc(FL$) < 32 Or KeyboardPushed(#PB_Key_Return) : FL$= "" : EndIf
; THE FOLLOWING 3 LINES WILL CLEAR THE STICKY KEYPRESS BUG ASSOCIATED WITH THE LINUX INPUT REQUESTER
ONKEY= 1 : Repeat : Delay(20)
Repeat : X= WindowEvent() : If X = #PB_Event_CloseWindow : End : EndIf : Until X = 0
ExamineKeyboard() : If Not KeyboardPushed(#PB_Key_All) : ONKEY= 0 :EndIf : Until Not ONKEY
CompilerElse
If FL$<>""
If Asc(FL$) < 32 : FL$= "" : EndIf
CompilerEndIf
If HOST And (CLIENTID1 Or CLIENTID2 Or CLIENTID3)
MESSAGE$= InputRequester("ESChat",NAME$+", enter chat message.",FL$)
If MESSAGE$
BUFFER$= "100"+NAME$+": "+MESSAGE$
If CLIENTID1 : SendNetworkString(CLIENTID1,BUFFER$,#PB_UTF8) : EndIf
If CLIENTID2 : SendNetworkString(CLIENTID2,BUFFER$,#PB_UTF8) : EndIf
If CLIENTID3 : SendNetworkString(CLIENTID3,BUFFER$,#PB_UTF8) : EndIf
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= NAME$+": "+MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
EndIf
ElseIf Not HOST And CHAT > 199
MESSAGE$= InputRequester("ESChat",NAME$+", enter chat message.",FL$)
If MESSAGE$
BUFFER$= "100"+NAME$+": "+MESSAGE$
SendNetworkString(HOSTID,BUFFER$,#PB_UTF8)
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= NAME$+": "+MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
If HOST And Not BYEBYE
SERVENT= NetworkServerEvent()
If SERVENT
NEWEVENTCLI= EventClient()
If NEWEVENTCLI = CLIENTID1
Select SERVENT
Case #PB_NetworkEvent_Data
FillMemory(*INBUFFER,#BUFLEN)
ReceiveNetworkData(CLIENTID1,*INBUFFER,#BUFLEN)
BUFFER$= PeekS(*INBUFFER,-1,#PB_UTF8)
FLAG$= Mid(BUFFER$,1,3) : MESSAGE$= Mid(BUFFER$,4,Len(BUFFER$)-3)
If FLAG$="101" And GUEST1$=""
GUEST1$= MESSAGE$ : REFRESH= 1
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST1$+" just connected."
If CLIENTID2 : G2L$= Mid(Str(Len(GUEST2$)+100),2,2)
SendNetworkString(CLIENTID2,"103"+GUEST1$,#PB_UTF8)
Else : G2L$= "00" : EndIf
If CLIENTID3 : G3L$= Mid(Str(Len(GUEST3$)+100),2,2)
SendNetworkString(CLIENTID3,"103"+GUEST1$,#PB_UTF8)
Else : G3L$= "00" : EndIf
HL$= Mid(Str(Len(NAME$)+100),2,2)
BUFFER$= "102"+HL$+G2L$+G3L$+NAME$+GUEST2$+GUEST3$
SendNetworkString(CLIENTID1,BUFFER$,#PB_UTF8)
ElseIf FLAG$="100"
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
If CLIENTID2 : SendNetworkString(CLIENTID2,BUFFER$,#PB_UTF8) : EndIf
If CLIENTID3 : SendNetworkString(CLIENTID3,BUFFER$,#PB_UTF8) : EndIf
EndIf
Case #PB_NetworkEvent_Disconnect
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST1$+" just left." : REFRESH= 1
If CLIENTID2 : SendNetworkString(CLIENTID2,"104"+GUEST1$,#PB_UTF8) : EndIf
If CLIENTID3 : SendNetworkString(CLIENTID3,"104"+GUEST1$,#PB_UTF8) : EndIf
CLIENTID1= 0 : GUEST1$= ""
EndSelect
ElseIf NEWEVENTCLI = CLIENTID2
Select SERVENT
Case #PB_NetworkEvent_Data
FillMemory(*INBUFFER,#BUFLEN)
ReceiveNetworkData(CLIENTID2,*INBUFFER,#BUFLEN)
BUFFER$= PeekS(*INBUFFER,-1,#PB_UTF8)
FLAG$= Mid(BUFFER$,1,3) : MESSAGE$= Mid(BUFFER$,4,Len(BUFFER$)-3)
If FLAG$="101" And GUEST2$=""
GUEST2$= MESSAGE$ : REFRESH= 1
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST2$+" just connected."
If CLIENTID1 : G1L$= Mid(Str(Len(GUEST1$)+100),2,2)
SendNetworkString(CLIENTID1,"103"+GUEST2$,#PB_UTF8)
Else : G1L$= "00" : EndIf
If CLIENTID3 : G3L$= Mid(Str(Len(GUEST3$)+100),2,2)
SendNetworkString(CLIENTID3,"103"+GUEST2$,#PB_UTF8)
Else : G3L$= "00" : EndIf
HL$= Mid(Str(Len(NAME$)+100),2,2)
BUFFER$= "102"+HL$+G1L$+G3L$+NAME$+GUEST1$+GUEST3$
SendNetworkString(CLIENTID2,BUFFER$,#PB_UTF8)
ElseIf FLAG$="100"
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
If CLIENTID1 : SendNetworkString(CLIENTID1,BUFFER$,#PB_UTF8) : EndIf
If CLIENTID3 : SendNetworkString(CLIENTID3,BUFFER$,#PB_UTF8) : EndIf
EndIf
Case #PB_NetworkEvent_Disconnect
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST2$+" just left." : REFRESH= 1
If CLIENTID1 : SendNetworkString(CLIENTID1,"104"+GUEST2$,#PB_UTF8) : EndIf
If CLIENTID3 : SendNetworkString(CLIENTID3,"104"+GUEST2$,#PB_UTF8) : EndIf
CLIENTID2= 0 : GUEST2$= ""
EndSelect
ElseIf NEWEVENTCLI = CLIENTID3
Select SERVENT
Case #PB_NetworkEvent_Data
FillMemory(*INBUFFER,#BUFLEN)
ReceiveNetworkData(CLIENTID3,*INBUFFER,#BUFLEN)
BUFFER$= PeekS(*INBUFFER,-1,#PB_UTF8)
FLAG$= Mid(BUFFER$,1,3) : MESSAGE$= Mid(BUFFER$,4,Len(BUFFER$)-3)
If FLAG$="101" And GUEST3$=""
GUEST3$= MESSAGE$ : REFRESH= 1
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST3$+" just connected."
If CLIENTID1 : G1L$= Mid(Str(Len(GUEST1$)+100),2,2)
SendNetworkString(CLIENTID1,"103"+GUEST3$,#PB_UTF8)
Else : G1L$= "00" : EndIf
If CLIENTID2 : G2L$= Mid(Str(Len(GUEST2$)+100),2,2)
SendNetworkString(CLIENTID2,"103"+GUEST3$,#PB_UTF8)
Else : G2L$= "00" : EndIf
HL$= Mid(Str(Len(NAME$)+100),2,2)
BUFFER$= "102"+HL$+G1L$+G2L$+NAME$+GUEST1$+GUEST2$
SendNetworkString(CLIENTID3,BUFFER$,#PB_UTF8)
ElseIf FLAG$="100"
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
If CLIENTID1 : SendNetworkString(CLIENTID1,BUFFER$,#PB_UTF8) : EndIf
If CLIENTID2 : SendNetworkString(CLIENTID2,BUFFER$,#PB_UTF8) : EndIf
EndIf
Case #PB_NetworkEvent_Disconnect
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= GUEST3$+" just left." : REFRESH= 1
If CLIENTID1 : SendNetworkString(CLIENTID1,"104"+GUEST3$,#PB_UTF8) : EndIf
If CLIENTID2 : SendNetworkString(CLIENTID2,"104"+GUEST3$,#PB_UTF8) : EndIf
CLIENTID3= 0 : GUEST3$= ""
EndSelect
Else
Select SERVENT
Case #PB_NetworkEvent_Connect
If Not CLIENTID1 : CLIENTID1= NEWEVENTCLI
ElseIf Not CLIENTID2 : CLIENTID2= NEWEVENTCLI
ElseIf Not CLIENTID3 : CLIENTID3= NEWEVENTCLI
Else
SendNetworkString(NEWEVENTCLI,"105ROOM FULL",#PB_UTF8)
Delay(200) : CloseNetworkConnection(NEWEVENTCLI)
EndIf
Case #PB_NetworkEvent_Data
ReceiveNetworkData(NEWEVENTCLI,*INBUFFER,#BUFLEN)
EndSelect
EndIf
EndIf
ElseIf HOSTID And Not BYEBYE
CLIVENT= NetworkClientEvent(HOSTID)
Select CLIVENT
Case #PB_NetworkEvent_Data
FillMemory(*INBUFFER,#BUFLEN)
ReceiveNetworkData(HOSTID,*INBUFFER,#BUFLEN)
BUFFER$= PeekS(*INBUFFER,-1,#PB_UTF8)
FLAG$= Mid(BUFFER$,1,3) : MESSAGE$= Mid(BUFFER$,4,Len(BUFFER$)-3)
If FLAG$= "102"
HNL= Val(Mid(MESSAGE$,1,2)) : HOST$= Mid(MESSAGE$,7,HNL) : CHAT= 200 : REFRESH= 1
OG1NL= Val(Mid(MESSAGE$,3,2)) : If OG1NL : OTHERG1$= Mid(MESSAGE$,7+HNL,OG1NL) : EndIf
OG2NL= Val(Mid(MESSAGE$,5,2)) : If OG2NL : OTHERG2$= Mid(MESSAGE$,7+HNL+OG1NL,OG2NL) : EndIf
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= HOST$+" welcomes you."
ElseIf FLAG$= "103"
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= MESSAGE$+" just connected." : REFRESH= 1
If OTHERG1$="" : OTHERG1$= MESSAGE$
Else : OTHERG2$= MESSAGE$ : EndIf
ElseIf FLAG$= "104"
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= MESSAGE$+" just left." : REFRESH= 1
If MESSAGE$=OTHERG1$ : OTHERG1$= ""
Else : OTHERG2$= "" : EndIf
ElseIf FLAG$= "105"
FLASH= ElapsedMilliseconds()+ 3000 : FLASH$= "* FULL CHATROOM *" : REFRESH= 1
FULL= 1 : CHAT= 0
ElseIf FLAG$= "100"
For IND= 23 To 1 Step -1 : SLINES$(IND)= SLINES$(IND-1) : Next IND
SLINES$(0)= MESSAGE$ : REFRESH= 1
If NUMLINES < 24
NUMLINES +1 : If NUMLINES=1 : SLINES$(21)= BLANK$+FILESAV$ : EndIf
EndIf
EndIf
Case #PB_NetworkEvent_Disconnect
If HOST$= "" : HOST$= "The host" : EndIf
If Not FULL : MessageRequester("ESChat",HOST$+" has closed the connection.",0) : EndIf
CHAT= 0 : REFRESH= 1 : HOSTID= 0 : HOST$= "" : NUMLINES= 0
EndSelect
EndIf
If Not BYEBYE
If RESEND < ElapsedMilliseconds() And CHAT=23
RESEND= ElapsedMilliseconds()+ 1000
BUFFER$= "101"+NAME$ : SendNetworkString(HOSTID,BUFFER$,#PB_UTF8)
EndIf
If ElapsedMilliseconds() < RELEASE
Repeat : Delay(2) : Until ElapsedMilliseconds() > RELEASE
EndIf
If FLASH > 0 And FLASH < ElapsedMilliseconds()
FLASH= 0 : REFRESH= 1
EndIf
EndIf
Until BYEBYE
FreeMemory(*INBUFFER) : End
I did not include the GetExternalIPAddress() procedure because I wanted to keep the executable under 100Kb and not be redundant.
This way of communicating seems to play nice on a LAN, but my fear is that it will fail on the internet.
If anyone would like to volunteer to help me test the internet connectivity, then kindly send a PM my way.