example chat code error, richtextgadget

Just starting out? Need help? Post your questions and find answers here.
Stephen
User
User
Posts: 21
Joined: Sat Oct 18, 2003 10:36 pm

example chat code error, richtextgadget

Post by Stephen »

((((......hWnd=OpenWindow(#client,(GetSystemMetrics_(#SM_CXSCREEN)-440)/2,(GetSystemMetrics_(#SM_CYSCREEN)-300)/2,440,300,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"PBChat Lite - Client: "+clientname)
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
ri=OpenRichEdit(hWnd,#info,10,10,310,250,"")
SetRichEditText(#info, 0, -1, "").....)))
this part. i installed the libary


;PBChat Client - written by Paul Leischow August 2, 2002
;
;Just start this program and enter a username. You can
;specify an IP address where the main chat server is
;located as well as what port the chat server is on.


;-Init Variables
#client=0
#info=1
#msg=2
#send=3
#users=4
#enter=5
#clientinfo=1
#txt1=6
#txt2=7
#txt3=8
#clientname=9
#ip=10
#port=11
#ok=12
#kill=13

DefType.s text,cr,clientname,name,IP,check
check=Chr(159)
cr=Chr(10)
maxbuffer.l=1000
*Buffer=AllocateMemory(0,maxbuffer,0)


;-Init Network
If InitNetwork()=0
MessageRequester("Error","Could Not Initialize Network",#MB_ICONERROR)
End
EndIf


;-Init Display
hWnd=OpenWindow(#clientinfo,(GetSystemMetrics_(#SM_CXSCREEN)-200)/2,(GetSystemMetrics_(#SM_CYSCREEN)-180)/2,200,180,#PB_Window_TitleBar,"Client Information")
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
TextGadget(#txt1,10,10,180,20,"User Name:")
TextGadget(#txt2,10,55,180,20,"IP Address:")
TextGadget(#txt3,10,95,180,20,"Port:")
StringGadget(#clientname,10,25,180,20,"")
StringGadget(#ip,10,70,180,20,"www.reelmediaproductions.com")
StringGadget(#port,10,110,180,20,"6699")
ButtonGadget(#ok,140,148,50,22,"Ok")
ActivateGadget(#clientname)

quit=0
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_EventGadget
If EventGadgetID()=#ok
quit=1
EndIf
EndIf
Until quit=1

clientname=GetGadgetText(#clientname)
If clientname=""
clientname="User"+Str(Random(500))
EndIf
IP=GetGadgetText(#ip)
port=Val(GetGadgetText(#port))
CloseWindow(#clientinfo)


hWnd=OpenWindow(#client,(GetSystemMetrics_(#SM_CXSCREEN)-440)/2,(GetSystemMetrics_(#SM_CYSCREEN)-300)/2,440,300,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"PBChat Lite - Client: "+clientname)
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
ri=OpenRichEdit(hWnd,#info,10,10,310,250,"")
SetRichEditText(#info, 0, -1, "")

ListIconGadget(#users,330,10,100,230,"Users Online",95)
TextGadget(#kill,330,245,100,20,"")
StringGadget(#msg,10,270,310,20,"")
ButtonGadget(#send,330,270,100,22,"Send")
AddKeyboardShortcut(#client,#PB_Shortcut_Return,#enter)
ActivateGadget(#msg)

RichEditFont(#info,"Arial",$0000aa,$ffffff,0,0,0,0,0)

;-Main Program
ConnectionID=OpenNetworkConnection(IP,port)
If ConnectionID
text=check+clientname
PokeS(*Buffer,text,Len(text))
SendNetworkData(ConnectionID,*Buffer,Len(text))
oldtime=GetTickCount_()
quit=0

Repeat
timeout=600-(GetTickCount_()-oldtime)/1000
SetGadgetText(#kill,"Timeout: "+Str(timeout)+" secs.")
If timeout<=0
MessageRequester("Timeout","You have been inactive for 10 minutes..."+Chr(10)+"Your connection has been closed.",#MB_ICONWARNING)
quit=1
EndIf

CEvent.l=NetworkClientEvent(ConnectionID)
EventID=WindowEvent()

If CEvent Or EventID
If EventID=#PB_EventCloseWindow
quit=1
EndIf

If EventID=#PB_EventMenu
Select EventMenuID()
Case #enter
sendmessage=1
EndSelect
EndIf

If EventID=#PB_EventGadget
Select EventGadgetID()
Case #send
sendmessage=1
EndSelect
EndIf

Select CEvent
Case 2
length=ReceiveNetworkData(ConnectionID,*Buffer,maxbuffer)
text=PeekS(*Buffer,length)
pos=FindString(text,":",1)
If pos
If Left(text,pos-1)=clientname
RichEditTextColor($aa0000)
Else
RichEditTextColor($0000aa)
EndIf
EndIf
SetRichEditText(#info,-1,-1,text+cr)
SendMessage_(ri,#EM_LINESCROLL,0,2)
FlashWindow_(hWnd,1)

Case 3

ReceiveNetworkFile(ConnectionID,"users."+Str(port))
ClearGadgetItemList(#users)
If ReadFile(0,"users."+Str(port))
While Eof(0)=0
name=ReadString()
AddGadgetItem(#users,-1,name)
Wend
CloseFile(0)
EndIf

EndSelect

If sendmessage=1
sendmessage=0
oldtime=GetTickCount_()
text=GetGadgetText(#msg)
PokeS(*Buffer,text,Len(text))
SendNetworkData(ConnectionID,*Buffer,Len(text))
SetGadgetText(#msg,"")
ActivateGadget(#msg)
EndIf

Else
Delay(10)
EndIf

Until quit=1
CloseNetworkConnection(ConnectionID)

Else
MessageRequester("Connection Error","Could Not Connect to Main Server",#MB_ICONERROR)
EndIf
End


;PBChat Server - written by Paul Leischow August 2, 2002
;
;This chat server listens to the port you sepcify. You can
;have different chat rooms by starting more copies of this
;server and using different ports for each.


;-Init Variables
#server=0
#info=1
#msg=2
#send=3
#users=4
#enter=5

#clientinfo=6
#txt1=7
#port=8
#ok=9

DefType.s clientname,text,cr,check
check=Chr(159)
cr=Chr(10)
maxbuffer.l=1000
*Buffer=AllocateMemory(0,maxbuffer,0)

Structure userinfo
id.l
time.l
name.s
EndStructure
NewList user.userinfo()





;-Init Procedures
Procedure.s CurrentTime()
GetLocalTime_(time.SYSTEMTIME)
hour$=Str(time\wHour)
minute$=Str(time\wMinute)
second$=Str(time\wSecond)
If Len(hour$)=1:hour$="0"+hour$:EndIf
If Len(minute$)=1:minute$="0"+minute$:EndIf
If Len(second$)=1:second$="0"+second$:EndIf
curtime$=hour$+":"+minute$+":"+second$
ProcedureReturn curtime$
EndProcedure




;-Init Network
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf




;-Init Display
hWnd=OpenWindow(#clientinfo,(GetSystemMetrics_(#SM_CXSCREEN)-200)/2,(GetSystemMetrics_(#SM_CYSCREEN)-90)/2,200,90,#PB_Window_TitleBar,"Client Information")
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
TextGadget(#txt1,10,10,180,20,"PBChat Server Port:")
StringGadget(#port,10,25,180,20,"6699")
ButtonGadget(#ok,140,55,50,22,"Ok")
ActivateGadget(#port)

quit=0
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_EventGadget
If EventGadgetID()=#ok
port=Val(GetGadgetText(#port))
If port>0 And port<10000
quit=1
EndIf
EndIf
EndIf
Until quit=1
CloseWindow(#clientinfo)




hWnd=OpenWindow(#server,10,10,440,300,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"PBChat Lite - Server "+Chr(169)+"2002 Reel Media Productions")
If hWnd=0 Or CreateGadgetList(hWnd)=0:End:EndIf
ri=OpenRichEdit(hWnd,#info,10,10,310,250,"")
ListIconGadget(#users,330,10,100,250,"Users Online",95)
StringGadget(#msg,10,270,310,20,"")
ButtonGadget(#send,330,270,100,22,"Send")
AddKeyboardShortcut(#server,#PB_Shortcut_Return,#enter)
ActivateGadget(#msg)

RichEditFont(#info,"Courier New",$0000aa,$ffffff,0,0,0,0,0)


;-Main Program
If CreateNetworkServer(port)
SetRichEditText(#info,-1,-1,"Server Created on Port: "+Str(port)+cr)


Repeat
SEvent.l=NetworkServerEvent()
EventID=WindowEvent()

If SEvent Or EventID
If EventID=#PB_EventMenu
Select EventMenuID()
Case #enter
sendmessage=1
EndSelect
EndIf
If EventID=#PB_EventGadget
Select EventGadgetID()
Case #send
sendmessage=1
EndSelect
EndIf


If SEvent
ClientID=NetworkClientID()
ResetList(user())
While NextElement(user())
If ClientID=user()\id
clientname=user()\name
LastElement(user())
EndIf
Wend

Select SEvent
Case 1
AddElement(user())
user()\id=ClientID
user()\time=GetTickCount_()

Case 2
length=ReceiveNetworkData(ClientID,*Buffer,maxbuffer)
text.s=PeekS(*Buffer,length)
If Left(text,1)=check
user()\name=Mid(text,2,Len(text))
clientname=user()\name
text="** "+clientname+" has Joined ("+CurrentTime()+" CST)"
Gosub update_users
Else
text=clientname+": "+text
EndIf

SetRichEditText(#info,-1,-1,text+cr)
SendMessage_(ri,#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))

ResetList(user())
While NextElement(user())
If GetTickCount_()-user()\time>600000
CloseNetworkConnection(user()\id)
DeleteElement(user())
fix=1
Else
If user()\id=ClientID
user()\time=GetTickCount_()
EndIf
SendNetworkData(user()\id,*Buffer,Len(text))
EndIf
Wend
If fix=1:Gosub update_users:fix=0:EndIf


Case 4
text="** "+clientname+" has Quit ("+CurrentTime()+" CST)"
SetRichEditText(#info,-1,-1,text+cr)
SendMessage_(ri,#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))
ResetList(user())
While NextElement(user())
SendNetworkData(user()\id,*Buffer,Len(text))
Wend
ResetList(user())
While NextElement(user())
If user()\id=ClientID
DeleteElement(user())
LastElement(user())
EndIf
Wend
Gosub update_users
CloseNetworkConnection(ClientID)
EndSelect
EndIf

If sendmessage=1
sendmessage=0
text="Server: "+GetGadgetText(#msg)
SetRichEditText(#info,-1,-1,text+cr)
SendMessage_(ri,#EM_LINESCROLL,0,2)
PokeS(*Buffer,text,Len(text))
ResetList(user())
While NextElement(user())
SendNetworkData(user()\id,*Buffer,Len(text))
Wend
SetGadgetText(#msg,"")
ActivateGadget(#msg)
EndIf

Else
Delay(10)
EndIf
Until EventID=#PB_EventCloseWindow
CloseNetworkServer()
EndIf
End



;-update_users
update_users:
ClearGadgetItemList(#users)
ResetList(user())
While NextElement(user())
AddGadgetItem(#users,-1,user()\name)
Wend

If CreateFile(0,"users."+Str(port))
ResetList(user())
While NextElement(user())
WriteStringN(user()\name)
Wend
CloseFile(0)
ResetList(user())
While NextElement(user())
SendNetworkFile(user()\id,"users."+Str(port))
Wend
EndIf
Return
User avatar
Paul
PureBasic Expert
PureBasic Expert
Posts: 1282
Joined: Fri Apr 25, 2003 4:34 pm
Location: Canada
Contact:

Post by Paul »

Requires El_Choni's RichEdit ASM library to be installed in UserLibraries folder. You can download RichEdit from the Resources Site.
Image Image
Post Reply