CodyBarrett Posted February 21, 2009 Posted February 21, 2009 ok hi i made a TCP chat server (old version is in sig) and uhh i added an installation GUI to it, sort of NOT installing it but anyway... it wont close once the installation stops? any help would be VERY apreciative? BTW its probably just a small thing i missed but anyway here: expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.0.0 Author: Bob Script Function: TCP Multiclient Chat Server #ce ---------------------------------------------------------------------------- #Include <GUIConstantsEx.Au3> #Include <WindowsConstants.Au3> #Include <EditConstants.Au3> #Include <StaticConstants.Au3> #Include <Misc.Au3> #Include <GUIEdit.Au3> #Include <Date.Au3> #Include <Array.au3> #include <ScrollBarConstants.au3> #include <ProgressConstants.au3> HotKeySet('{F11}','Maxi_Mini') HotKeySet('^p','Preferences') HotKeySet('{F1}','Help') Opt('GUIOnEventMode',1) If FileExists(@ScriptDir & '\S-Settings.ini') And FileExists(@ScriptDir & '\Alert.wma') And FileExists(@ScriptDir & '\Online.wma') Then ;Installation GUI Check Else $InstallGUI = GUICreate('Installing...',300,100,-1,-1,-2139094904) GUISetOnEvent($GUI_EVENT_CLOSE, '_EXIT',$InstallGUI) $InstallLabel = GUICtrlCreateLabel('Installing... Files',10,10,300,20) $InstallProgressBar = GUICtrlCreateProgress(10,40,280,50) GUISetState(@SW_SHOW) $o0o = 0 Do $o0o = $o0o + 1 GUICtrlSetData($InstallProgressBar,$o0o,'') Do $o0o = $o0o + 1 GUICtrlSetData($InstallProgressBar,$o0o,'') GUICtrlSetData($InstallLabel,'Installing... S-Settings.Ini') IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','IP',@IPAddress1 ) IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','Port','4444') IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','Name','Server') IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','MaxConnections','100') IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Name','Courier New') IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Size','10') IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Style','400') IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Color','0xFFFFFF') IniWrite(@ScriptDir & '\S-Settings.ini','##Edits##','Color','0x000000') Sleep(100) until $o0o = 33 Do $o0o = $o0o + 1 GUICtrlSetData($InstallProgressBar,$o0o,'') GUICtrlSetData($InstallLabel,'Installing... Alert.Wma') FileInstall('C:\Documents and Settings\Barett\My Documents\Scripts\TCP Chat\BTCP Chat\Alert.wma',@ScriptDir & '\Alert.wma') Sleep(100) until $o0o = 66 Do $o0o = $o0o + 1 GUICtrlSetData($InstallProgressBar,$o0o,'') GUICtrlSetData($InstallLabel,'Installing... Online.Wma') FileInstall('C:\Documents and Settings\Barett\My Documents\Scripts\TCP Chat\BTCP Chat\Online.wma',@ScriptDir & '\Online.wma') Sleep(100) until $o0o = 99 Until $o0o = 99 GUIDelete($InstallGUI) EndIf ;================================================================================================================ ;================================================================================================================ ;================================================================================================================ TCPStartup() Global $F_Name = IniRead(@ScriptDir & '\S-Settings.ini','##Font##','Name','') Global $F_Size = IniRead(@ScriptDir & '\S-Settings.ini','##Font##','Size','') Global $F_Style = IniRead(@ScriptDir & '\S-Settings.ini','##Font##','Style','') Global $F_Color = IniRead(@ScriptDir & '\S-Settings.ini','##Font##','Color','') Global $Bkcolor = IniRead(@ScriptDir & '\S-Settings.ini','##Edits##','Color','') Global $Server_Name = IniRead(@ScriptDir & '\S-Settings.ini','##Global##','Name','') Global $IP = IniRead(@ScriptDir & '\S-Settings.ini','##Global##','IP','') Global $Port = IniRead(@ScriptDir & '\S-Settings.ini','##Global##','Port','') Global $MaxConnections = IniRead(@ScriptDir & '\S-Settings.ini','##Global##','MaxConnections','') Dim $Clients[$MaxConnections + 1][10] Global $Listen = TCPListen($IP,$Port,$MaxConnections) If $Listen = -1 Or @error Then Exit MsgBox(42,'Error','Cannot Open A Listening Socket.') Wipe() $Server_GUI = GUICreate('BTCPS - Bobs [ TCP Server ] ',500,320,-1,-1,1,138) GUISetOnEvent($GUI_EVENT_CLOSE, '_EXIT',$Server_GUI) $Menu = GUICtrlCreateMenu('File') $M_Pre = GUICtrlCreateMenuItem('Preferences [ Ctrl + p ]',$Menu) GUICtrlSetOnEvent($M_Pre,'Preferences') $HELP_Menu = GUICtrlCreateMenuItem('Help [ F1 ]',$Menu) GUICtrlSetOnEvent($HELP_Menu,'Help') $M_Exit = GUICtrlCreateMenuItem('Exit [ Esc ]',$Menu) GUICtrlSetOnEvent($M_Exit,'_EXIT') $Main = GUICtrlCreateEdit('',5,5,485,220,2103360) GUICtrlSetFont($Main,$F_Size,$F_Style,'',$F_Name) GUICtrlSetColor($Main,$F_Color) GUICtrlSetBkColor($Main,$Bkcolor) $Send = GUICtrlCreateEdit('',5,230,485,40,2101248) GUICtrlSetFont($Send,$F_Size,$F_Style,'',$F_Name) GUICtrlSetColor($Send,$F_Color) GUICtrlSetBkColor($Send,$Bkcolor) GUICtrlSetState($Send,$GUI_FOCUS) GUISetBkColor($Bkcolor,$Server_GUI) GUISetState(@SW_SHOW,$Server_GUI) ;================================================================================================================ ;=========================================Preferences GUI======================================================== ;================================================================================================================ $Preferences_GUI = GUICreate('Preferences',200,300,-1,-1,-2139094904,'',$Server_GUI) $Change = GUICtrlCreateButton('Change',5,270,90,20) GUICtrlSetOnEvent($Change,'Change') $Cancel = GUICtrlCreateButton('Cancel',100,270,90,20) GUICtrlSetOnEvent($Cancel,'Preferences') GUICtrlCreateInput('Name : ',5,5,50,20,$ES_READONLY) $Input_Name = GUICtrlCreateInput($Server_Name,60,5,130,20) Global $I_Name = $Input_Name GUICtrlCreateInput('Ip : ',5,30,50,20,$ES_READONLY) $Input_Ip = GUICtrlCreateInput($IP,60,30,130,20) Global $I_Ip = $Input_Ip GUICtrlCreateInput('Port : ',5,55,50,20,$ES_READONLY) $Input_Port = GUICtrlCreateInput($Port,60,55,130,20,$ES_NUMBER) Global $I_Port = $Input_Port GUICtrlCreateInput('Clients : ',5,80,50,20,$ES_READONLY) $Input_MaxConnections = GUICtrlCreateInput($MaxConnections,60,80,130,20,$ES_NUMBER) Global $I_Max = $Input_MaxConnections $Input_Font = GUICtrlCreateButton('Font...',5,110,70,20) GUICtrlSetOnEvent($Input_Font,'Font') $Input_Bk = GUICtrlCreateButton('Background Color...',80,110,110,20) GUICtrlSetOnEvent($Input_Bk,'Background') $Input_Disconnect = GUICtrlCreateInput('Client Name',5,160,100,20) $Button_Disconnect = GUICtrlCreateButton('Disconnect',110,160,80,20) GUICtrlSetOnEvent($Button_Disconnect,'DisconnectClient') GUISetState(@SW_HIDE) ;================================================================================================================ ;=========================================END Preferences START Help GUI========================================= ;================================================================================================================ $Help_GUI = GUICreate('Help',300,300,-1,-1,-2139094904,'',$Server_GUI) $X = GUICtrlCreateButton('x',270,0,20,20) GUICtrlSetOnEvent($X,'Help') $Tab = GUICtrlCreateTab(0,0,300,300) $Help_Info = GUICtrlCreateTabItem('General Help') GUICtrlCreateLabel('#Authored by Bob - 2009' & @CRLF & ' *Bob00037 On Autoit Forums*' & @CRLF & @CRLF & '#HotKeys : ' & @CRLF & @CRLF & ' F1 = Help ' & @CRLF & ' Esc = EXIT' & @CRLF & ' F11 = Maximize Window\Minimize Window' & @CRLF & ' CTRL + P = Preferences',30,30,300,500) $TCP_Info = GUICtrlCreateTabItem('TCP Help') GUICtrlCreateLabel('#HotKeys : ' & @CRLF & @CRLF & ' F1 = Help ' & @CRLF & ' CTRL + P = Preferences' & @CRLF & @CRLF &'#Server Specifications: '& @CRLF & @CRLF & ' Max Connnections = 100' & @CRLF & ' Startup = When BTCPS Is Run.' & @CRLF & ' Shutdown = When BTCPS Is Exited.',30,30,300,500) GUISetState(@SW_HIDE) ;================================================================================================================ ;=========================================END Help START NewClient GUI=========================================== ;================================================================================================================ $NewClientGUI = GUICreate('Help',200,20,-1,-1,-2139094904,'',$Server_GUI) $NewClientLabel = GUICtrlCreateLabel('',5,5,100,55) GUISetState(@SW_HIDE) ;================================================================================================================ ;=========================================END NewClient GUI====================================================== ;================================================================================================================ GUICtrlSetData($Main,GUICtrlRead($Main) & 'Starting TCP Services...') GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & 'Name : ' & $Server_Name ) GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & 'Ip : ' & $IP ) GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & 'Port : ' & $Port ) GUICtrlSetData($Main,GUICtrlRead($Main) & @CRLF & 'Maximum Connections : ' & $MaxConnections ) SoundPlay(@ScriptDir & '\Online.wma') While 1 If _IsPressed('0D') And GUICtrlRead($Send) <> '' Then Sent() $OldCount = $Clients[0][0] Accept() If $Clients[0][0] <> $OldCount Then NewNotif($Clients[0][0]) EndIf Recieve() _GUICtrlEdit_Scroll($Main,$SB_PAGEDOWN) WEnd Func Accept() ;Accepts An Incomming Connection. Local $NewClient = TCPAccept($Listen) If $NewClient = -1 Then Return For $i = 0 To $MaxConnections If $Clients[$i][0] = 0 Then $Clients[$i][0] = $NewClient $Clients[0][0] += 1 SoundPlay(@ScriptDir & '\Online.wma') Return EndIf Next If $Clients[0][0] <> $OldCount Then For $i = 0 To $MaxConnections NewNotif($Clients[$i][1]) Next EndIf EndFunc Func Background() ;Sets GUI Background & $Main Background & Send Background Color. Local $c = _ChooseColor(2,$Bkcolor,1,$Preferences_GUI) If @error Then MsgBox(42,'Error','Please Choose A Color.') Else GUISetBkColor($c,$Server_GUI) GUICtrlSetBkColor($Send,$c) GUICtrlSetBkColor($Main,$c) IniWrite(@ScriptDir & '\S-Settings.ini','##Edits##','Color',$c) EndIf EndFunc Func Broadcast($Msg) ;Broadcasts A MSG To ALL Clients. For $i = 0 To $MaxConnections If $Clients[$i][0] <> -1 Then TCPSend($Clients[$i][0],$Msg) Next EndFunc Func Change() ;Changes KEY Settings In The Preferences GUI. If GUICtrlRead($Input_Ip) <> '' and GUICtrlRead($I_Ip) <> IniRead(@ScriptDir & '\S-Settings.ini','##Global##','IP','') Then ; Changes IP. IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','IP',GUICtrlRead($Input_Ip )) GUISetState(@SW_HIDE,$Preferences_GUI) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & '[Server Message] :' & @CRLF & 'Ip Has Been Changed To ' & GUICtrlRead($Input_Ip) & @CRLF & 'Closing BTCPS In 5 Seconds...') Sleep(5000) _EXIT() EndIf If GUICtrlRead($Input_MaxConnections) <> '' and GUICtrlRead($I_Max) <> IniRead(@ScriptDir & '\S-Settings.ini','##Global##','MaxConnections','') Then ;Changes MAXConnections. IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','MaxConnections',GUICtrlRead($Input_MaxConnections )) GUISetState(@SW_HIDE,$Preferences_GUI) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & '[Server Message] :' & @CRLF & 'Maximum Connections Has Been Changed To ' & GUICtrlRead($Input_MaxConnections) & '....' & @CRLF & 'Closing BTCPS In 5 Seconds...') Sleep(5000) _EXIT() EndIf If GUICtrlRead($Input_Port) <> '' and GUICtrlRead($I_Port) <> IniRead(@ScriptDir & '\S-Settings.ini','##Global##','Port','')Then ;Changes PORT. IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','Port',GUICtrlRead($Input_Port )) GUISetState(@SW_HIDE,$Preferences_GUI) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & '[Server Message] :' & @CRLF & 'Port Has Been Changed To ' & GUICtrlRead($Input_Port) & @CRLF & 'Closing BTCPS In 5 Seconds...') Sleep(5000) _EXIT() EndIf If GUICtrlRead($Input_Name) <> '' and GUICtrlRead($I_Name) <> IniRead(@ScriptDir & '\S-Settings.ini','##Global##','Name','') Then ;Changes Name. IniWrite(@ScriptDir & '\S-Settings.ini','##Global##','Name',GUICtrlRead($Input_Name )) GUISetState(@SW_HIDE,$Preferences_GUI) GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & '[Server Message] :' & @CRLF & 'Server-Name Has Been Changed To ' & GUICtrlRead($Input_Name)) If $Listen <> -1 Then $Server_Name = GUICtrlRead($Input_Name) Broadcast('[Server Message] :' & @CRLF & 'Server-Name Has Been Changed To ' & GUICtrlRead($Input_Name)) Else MsgBox(0,'Error','Must Have A Client To Send To.') EndIf EndIf EndFunc Func Disconnect($list, $Mode = 0) ;Upon Client Disconnection - Severs The Socket's Connection. If $Mode = 0 Then For $i = 0 To $MaxConnections Broadcast('[ Server Message ]' & @CRLF & $Clients[$i][0] & ' Has Disconnected.') TCPCloseSocket($Clients[$i][0]) Next EndIf EndFunc Func DisconnectClient() ;Server Is Able To Disconnect Client. Local $Socket = GUICtrlRead($Input_Disconnect) If GUICtrlRead($Input_Disconnect) <> '' Then For $i = 1 To $MaxConnections If $Clients[$i][1] = GUICtrlRead($Input_Disconnect) Then TCPSend($Clients[$i][$Socket],'^/Disconnect') TCPCloseSocket($Clients[$i][0]) Next EndIf EndFunc Func Font() ;Sets $Main & Send Font + Specs. Local $Font = _ChooseFont($F_Name,$F_Size,$F_Color,$F_Style,'','','',$Preferences_GUI) If @error Then MsgBox(42,'Error','Please Choose A Font type.','',$Preferences_GUI) Else IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Name',$Font[2]) IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Size',$Font[3]) IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Style',$Font[5]) IniWrite(@ScriptDir & '\S-Settings.ini','##Font##','Color',$Font[7]) GUICtrlSetFont($Send,$Font[3],$Font[5],'',$Font[2]) GUICtrlSetColor($Send,$Font[7]) GUICtrlSetFont($Main,$Font[3],$Font[5],'',$Font[2]) GUICtrlSetColor($Main,$Font[7]) EndIf EndFunc Func Help() ;Help GUI. If WinActive($Server_GUI) Then GUISetState(@SW_SHOW,$Help_GUI) Else GUISetState(@SW_HIDE,$Help_GUI) EndIf EndFunc Func Kill($_Socket) ;Kills All Sockets And ALL Data And Variables. For $i = 0 To $MaxConnections If $Clients[$i][0] = $_Socket Then For $j = 0 to 9 $Clients[$i][$j] = 0 Next Return TCPCloseSocket($_Socket) EndIf Next EndFunc Func Maxi_Mini() ;Minimizes OR Restores MAIN GUI Window Status. If WinActive($Server_GUI) Then GUISetState(@SW_MINIMIZE,$Server_GUI) Else GUISetState(@SW_RESTORE,$Server_GUI) EndIf EndFunc Func NewNotif($Name) ;Notifies Server Of Incomming Connection. GUICtrlSetData($NewClientLabel,$Name & ' Has Connected...') GUISetState(@SW_SHOW,$NewClientGUI) Sleep(1000) GUISetState(@SW_HIDE,$NewClientGUI) EndFunc Func Preferences() ;Settings GUI. If WinActive($Server_GUI) = 1 Then GUISetState(@SW_SHOW,$Preferences_GUI) Else GUISetState(@SW_HIDE,$Preferences_GUI) EndIf EndFunc Func Recieve() ;Recved MSG From Clients. For $i = 0 To $MaxConnections $Recv = TCPRecv($Clients[$i][0],1000000) If $Recv <> '' Then If StringInStr($Recv,'^/Is_Now_An_Admin') Then ;Checks For Administrative Rights. $Clients[$i][2] = 'Administrator' IniWrite(@ScriptDir & '/S-Settings.ini','##Client=Admin##',$Clients[$i][1],$Clients[$i][2]) Broadcast('[ Server Message ]' & @CRLF & $Clients[$i][1] & ' Is Now An Administrator.') GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & '[ Server Message ]' & @CRLF & $Clients[$i][1] & ' Is An Administrator.') $Recv = '' EndIf If StringInStr($Recv,'^/ClientList=') Then ;Sends List To Requesting Client. TCPSend($Clients[$i][0],'ClientList-Online(' & $Clients[0][1] & ')') $Recv = '' EndIf If StringInStr($Recv,'^/ClientName=(') Then ;Resets $Clients[$i][1] Of The Changed Clientname. $Recv = StringReplace(StringReplace($Recv,'^/ClientName=(',''),')','') GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Clients[$i][1] & ' Has Changed Its Name To ' & $Recv ) Broadcast($Clients[$i][1] & ' Has Changed Its Name To ' & $Recv) $Clients[$i][1] = $Recv $Recv = '' EndIf If StringInStr($Recv,'^/DisconnectClient=(') Then ;Allows\Denies Client Disconnect Other Client Abilities. $Recv = StringReplace(StringReplace($Recv,'^/DisconnectClient=(',''),')','') If $Clients[$i][2] = 'Administrator' Then If $Recv = $Clients[0][1] Then If $Clients[0][1] <> 'Administrator' Then For $i = 0 To $MaxConnections If $Recv = $Clients[$i][1] Then TCPSend($Clients[$i][0], '^/Disconnect.') EndIf Next Else TCPSend($Clients[$i][0],'[ Server Message ]' & @CRLF &'Cannot Disconnect An Administrator, PLease Contact Your Server Host To Disconnect The Administrator In Question.') EndIf EndIf EndIf $Recv = '' EndIf If StringInStr($Recv,'^/Username=(') Then ;Assigns A Socket\Client A Username\The Username They Have Chosen. $Recv = StringReplace(StringReplace($Recv,'^/Username=(',''),')','') $Clients[$i][1] = $Recv $Recv = '[ Server Message ]' & @CRLF & $Recv & ' has joined' & @CRLF GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Recv) Broadcast($Recv) $Recv = '' EndIf If $Recv <> '' Then ;If It Isnt Any Of The Above. GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Clients[$i][1] & ' Says : ' & @CRLF & $Recv) Broadcast($Clients[$i][1] & ' Says :' & @CRLF & $Recv) SoundPlay(@ScriptDir & '\Alert.wma') EndIf EndIf Next EndFunc Func Sent() ;Sends A Msg To ALL Clients If GUICtrlRead($Send) <> '' Then GUICtrlSetData($Main, GUICtrlRead($Main) & @CRLF & $Server_Name & ' : ' & @CRLF & GUICtrlRead($Send)) Broadcast($Server_Name & ' Says : ' & @CRLF & GUICtrlRead($Send)) GUICtrlSetData($Send,'') GUICtrlSetState($Send,$GUI_FOCUS) EndIf EndFunc Func Wipe() ;Wipes The Variables The Past Server Start Have Assigned. For $i = 0 To $MaxConnections If $Clients[$i][0] <> 0 Then Kill($Clients[$i][0]) For $j = 0 to 9 $Clients[$i][$j] = 0 Next Next EndFunc Func _EXIT() ;On Exit For $i = 0 To $MaxConnections Broadcast('^/Disconnect') Sleep(100) TCPCloseSocket($Clients[0][0]) Next Sleep(1000) TCPShutdown() Exit EndFunc [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
jvanegmond Posted February 21, 2009 Posted February 21, 2009 Bad installer. You FileInstall a couple of files 66 times in the same place from the same source just because it looks better on the progress bar? I don't see any OnEventMode and I don't see you checking for GUIGetMsg either. You need to do either of the two. If anything is unclear, then please ask. github.com/jvanegmond
CodyBarrett Posted February 21, 2009 Author Posted February 21, 2009 well uhh fileinstall() im using that.. i guess i could move them and the iniwrite OUTSIDE of the loops ill try that thanks.. its just i wanted it to look Profestional withought making it complicated [size="1"][font="Tahoma"][COMPLETED]-----[FAILED]-----[ONGOING]VolumeControl|Binary Converter|CPU Usage| Mouse Wrap |WinHide|Word Scrammbler|LOCKER|SCREEN FREEZE|Decisions Decisions|Version UDF|Recast Desktop Mask|TCP Multiclient EXAMPLE|BTCP|LANCR|UDP serverless|AIOCR|OECR|Recast Messenger|AU3C|Tik-Tak-Toe|Snakes & Ladders|BattleShips|TRON|SNAKE_____________________[u]I love the Helpfile it is my best friend.[/u][/font][/size]
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now