dbzfanatic Posted October 23, 2008 Posted October 23, 2008 Ok so I've tried adding _SQLite_QueryFinalize($Query) and I've tried doing something like _SQLite_QueryFinalize(_SQLite_Exec($database,"SELECT * FROM users",$Query)) but they both throw the error,even when given together like _SQLite_QueryFinalize(_SQLite_Exec($database,"SELECT * FROM users",$Query)) _SQLite_QueryFinalize($Query) _SQLite_Close() I just can't wrap my head around this one, what am I doing wrong? P.S. Yes I tried _SQLite_Close($database) too. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote]
ptrex Posted October 23, 2008 Posted October 23, 2008 @ Try to run the example from the HELP file. See if that works. If so you have a wrong syntax in your code. #include <SQLite.au3> #include <SQLite.dll.au3> Local $hQuery, $aRow, $aNames _SQLite_Startup () _SQLite_Open () ; open :memory: Database _SQLite_Exec (-1, "CREATE TABLE aTest (a,b,c);") _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('c','2','World');") _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('b','3',' ');") _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Hello');") _SQlite_Query (-1, "SELECT ROWID,* FROM aTest ORDER BY a;", $hQuery) _SQLite_FetchNames ($hQuery, $aNames) ; Read out the Tablenames MsgBox(0,"SQLite","Row ID is : " & StringFormat(" %-10s %-10s %-10s %-10s ", $aNames[0], $aNames[1], $aNames[2], $aNames[3]) & @CR) While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK ; This get 1 row at a time MsgBox(0,"SQLite","Get Data using FetchData : " & StringFormat(" %-10s %-10s %-10s %-10s ", $aRow[0], $aRow[1], $aRow[2], $aRow[3]) & @CR) _SQLite_QueryFinalize ($hQuery) ; This will stop the query, getting more rows WEnd _SQLite_Exec (-1, "DROP TABLE aTest;") _SQLite_Close () _SQLite_Shutdown () ;~ Output: ;~ ;~ rowid a b c ;~ 3 a 1 Hello regards ptrex Contributions :Firewall Log Analyzer for XP - Creating COM objects without a need of DLL's - UPnP support in AU3Crystal Reports Viewer - PDFCreator in AutoIT - Duplicate File FinderSQLite3 Database functionality - USB Monitoring - Reading Excel using SQLRun Au3 as a Windows Service - File Monitor - Embedded Flash PlayerDynamic Functions - Control Panel Applets - Digital Signing Code - Excel Grid In AutoIT - Constants for Special Folders in WindowsRead data from Any Windows Edit Control - SOAP and Web Services in AutoIT - Barcode Printing Using PS - AU3 on LightTD WebserverMS LogParser SQL Engine in AutoIT - ImageMagick Image Processing - Converter @ Dec - Hex - Bin -Email Address Encoder - MSI Editor - SNMP - MIB ProtocolFinancial Functions UDF - Set ACL Permissions - Syntax HighLighter for AU3ADOR.RecordSet approach - Real OCR - HTTP Disk - PDF Reader Personal Worldclock - MS Indexing Engine - Printing ControlsGuiListView - Navigation (break the 4000 Limit barrier) - Registration Free COM DLL Distribution - Update - WinRM SMART Analysis - COM Object Browser - Excel PivotTable Object - VLC Media Player - Windows LogOnOff Gui -Extract Data from Outlook to Word & Excel - Analyze Event ID 4226 - DotNet Compiler Wrapper - Powershell_COM - New
dbzfanatic Posted October 23, 2008 Author Posted October 23, 2008 (edited) Well that worked but the weird thing is that it only happens sometimes. I'm going to confess I got a chat server/client off the forums (can't remember who wrote it) and I'm trying to modify it to work a bit more effectively (at least for my purposes). I have a few things working better but that still doesn't work properly.CODE#RequireAdmin#Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_outfile=Chat Server.exe#AutoIt3Wrapper_Compression=4#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <EditConstants.au3>#include <StaticConstants.au3>#include <ScrollBarConstants.au3>#include <GuiEdit.au3>#include <SQLite.au3>#include <SQLite.dll.au3>#include <GUIListBox.au3>#Include <GuiListView.au3>#include <RC4.au3>;First Set the tray menu.Opt("TrayMenuMode",1);Start up TCP.TCPStartup ()_SQLite_Startup()#region SetingsGlobal $Ip = "0.0.0.0"Global $Port = 31758Global $MaxUsers = 100Global $Encrypt_Key = "@µf¤12" ;This must mach the clients encrypting key.Global $Log_File = @ScriptDir & "\Logs\log - " & @MDAY & "-" & @MON & "-" & @YEAR & ".log"Global $Update_Key_Time = 15 ;Time in Sec for how often the server should send a new key to the user, 0 disables it.Global $Database_File = @ScriptDir & "\Database.db3"#endregion#region Declear $varGlobal $User_List[$MaxUsers+1][6] ;[0] = socket ;[1] = Username ;[2] = encryption key ;[3] = Unique key timer ;[4] = old encryption key ;[5] = ListviewItem Control for dynamic updateing. Global $Users_Online = 0Global $Admins_Online = 0Global $Refresh_Timer = TimerInit()Global $Uniqe_Key_Refresh = TimerInit()Global $Query, $SQL_DataGlobal $Selected_IDGlobal $Listview_Color = 0xeeeeff$Update_Key_Time *= 1000#endregion$Tray_Menu_Showconsole = TrayCreateItem("Show Console")$Tray_Menu_Shutdown = TrayCreateItem("Shutdown Server")If Not FileExists($Database_File) Then $SQL_DB = _SQLite_Open($Database_File) _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB,"CREATE TABLE Accounts (id INTEGER PRIMARY KEY,username TEXT,password TEXT,admin INTEGER,ban INTEGER,online INTEGER)")) _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB,"INSERT INTO Accounts(username,password,admin,ban,online) VALUES ('ADMIN','Admin',1,0,0);"))Else $SQL_DB = _SQLite_Open($Database_File)EndIf$Log_File = FileOpen($Log_File,9);Create the console gui.$Form1 = GUICreate("Chat Server", 625, 362, 193, 125)$Tab1 = GUICtrlCreateTab(5, 5, 611, 351)$TabSheet1 = GUICtrlCreateTabItem("Chat")$Edit1 = GUICtrlCreateEdit("", 15, 35, 466, 286,BitOR($ES_AUTOVSCROLL,$ES_WANTRETURN,$WS_VSCROLL,$ES_READONLY))GUICtrlSetBkColor(-1,0xFFFFFF)$Input1 = GUICtrlCreateInput("", 15, 325, 421, 21)$Button1 = GUICtrlCreateButton("Kick", 560, 325, 40, 20, 0)$Button2 = GUICtrlCreateButton("Ban", 520, 325, 35, 20, 0)$Button3 = GUICtrlCreateButton("Send", 485, 325, 30, 20, 0x0001)$List1 = GUICtrlCreateList("", 485, 30, 121, 292)$Button4 = GUICtrlCreateButton("PM", 445, 325, 35, 20, 0)$TabSheet2 = GUICtrlCreateTabItem("Database")$Listview1 = GUICtrlCreateListView("Id|Username|Password|Admin|Ban|Online", 10, 35, 595, 255)$Label1 = GUICtrlCreateLabel("Username", 10, 295, 52, 17)$Input2 = GUICtrlCreateInput("", 65, 295, 121, 21)$Label2 = GUICtrlCreateLabel("Password", 10, 325, 50, 17)$Input3 = GUICtrlCreateInput("", 65, 320, 121, 21)$Checkbox1 = GUICtrlCreateCheckbox("Banned", 190, 300, 62, 17)$Checkbox2 = GUICtrlCreateCheckbox("Admin", 190, 325, 57, 17)$Button5 = GUICtrlCreateButton("Save", 255, 300, 55, 20, 0)$Button6 = GUICtrlCreateButton("Delete", 255, 325, 55, 20, 0)$Button7 = GUICtrlCreateButton("Create", 315, 300, 55, 20, 0)$TabSheet3 = GUICtrlCreateTabItem("Log")$Listview2 = GUICtrlCreateListView("Time|Dir|IP|Command|Param1|Param2|Param3|", 10, 35, 595, 314)GUICtrlSendMsg($Listview1, 0x101E, 0, 25)GUICtrlSendMsg($Listview1, 0x101E, 1, 100)GUICtrlSendMsg($Listview1, 0x101E, 2, 100)GUICtrlSendMsg($Listview1, 0x101E, 3, 50)GUICtrlSendMsg($Listview1, 0x101E, 4, 50)GUICtrlSendMsg($Listview1, 0x101E, 5, 50)GUICtrlSendMsg($Listview2, 0x101E, 0, 65)GUIRegisterMsg(0x004E,'_Listview');start to listen for users and messages.$MainSocket = TCPListen($Ip, $Port,$MaxUsers);if the server was unable to connect to the ip and port thenIf $MainSocket = -1 Then ;Show the error. MsgBox(16,"Error","Uable to Connect." & @CRLF & "IP: " & $Ip & @CRLF & "Port: " & $Port) ;exit. ExitEndIf_LoadDatabase()GUISetState(@SW_SHOW)While 1 If GUICtrlRead($Checkbox1) = 1 Then $Set_Ban = 1 Else $Set_Ban = 0 EndIf If GUICtrlRead($Checkbox2) = 1 Then $Set_Admin = 1 Else $Set_Admin = 0 EndIf ;get Tray menu message $Tray_Message = TrayGetMsg() ;Handle the message Switch $Tray_Message ;If the message is to show the console Case $Tray_Menu_Showconsole ;Then show the console. GUISetState(@SW_SHOW,$Form1) GUISetState(@SW_RESTORE) ;Case it is to shutdown the server. Case $Tray_Menu_Shutdown OnAutoitExit() ;Safly shut it down Exit EndSwitch ;Get Gui Message. $Gui_Message = GUIGetMsg() ;Handle the gui Message Switch $Gui_Message Case $GUI_EVENT_CLOSE OnAutoitExit() Case $GUI_EVENT_MINIMIZE GUISetState(@SW_HIDE) Case $Button1 ;Kick _Kick(GUICtrlRead($List1)) Case $Button2 ;Ban _Ban(GUICtrlRead($List1)) Case $Button3 ;Say _SendAll( "message", GUICtrlRead($Input1) & Chr(2) & "1000,0x0000FF,Lucida Console,14", 'SYSTEM') _GUICtrlEdit_AppendText($Edit1,'SYSTEM: ' & GUICtrlRead($Input1) & @CRLF) GUICtrlSetData($Input1, '') Case $Button4 ;PM _PM('SYSTEM',GUICtrlRead($List1),GUICtrlRead($Input1)) Case $Button5 ;Save, saves the changes to the user $Selected_ID = _GUICtrlListView_GetSelectedIndices($Listview1) + 1 _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB, "UPDATE Accounts SET username = '" & StringUpper(GUICtrlRead($Input2)) & "', password = '" & GUICtrlRead($Input3) & "', ban = " & $Set_Ban & ", Admin = " & $Set_Admin & ", online = 0 WHERE id = " & $Selected_ID & ";")) GUICtrlSetData(GUICtrlRead($Listview1),$Selected_ID & '|' & StringUpper(GUICtrlRead($Input2)) & '|' & GUICtrlRead($Input3) & '|' & $Set_Admin & '|' & $Set_Ban & '|0') Case $Button6 ;Delete, removes the user $Selected_ID = _GUICtrlListView_GetSelectedIndices($Listview1) + 1 _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB, 'DELETE FROM Accounts WHERE id = ' & $Selected_ID & ';')) GUICtrlDelete(GUICtrlRead($Listview1)) Case $Button7 ;Create, Creates a new user in a safe maner. _CreateUser(GUICtrlRead($Input2), GUICtrlRead($Input3),$Set_Ban, $Set_Admin) EndSwitch ;check if we should update the user info. ;This is to avoid flickering. If TimerDiff($Refresh_Timer) > 1000 Then ;Update the userinfo;~ GUICtrlSetData($Label1,"Users Online: " & $Users_Online);~ GUICtrlSetData($Label2,"Admins Online: " & $Admins_Online) ;Restart the refresh timer. $Refresh_Timer = TimerInit() EndIf ;Gather Data and look what should be done with it. _RecvData() ;Look if a new user is trying to connect $New_Socket = TCPAccept($MainSocket) ;if not the start while 1 loop over again If $New_Socket = -1 Then ContinueLoop ;Add the user that is trying to connect. _AddUser($New_Socket)WEndFunc _Listview($hWnd, $Msg, $wParam, $lParam) ;0x0089ED88, 0x0089EEB4 = Selection changed in listview, 0x0089EEB4 for XP and 0x0089ED88 for vista. If $lParam = 0x0089ED88 Or $lParam = 0x0089EEB4 Then If GUICtrlRead($Tab1) <> 1 Then Return ;Guictrlread($Listview1) returns the control handle for the selected listview item. ;Read that items data and split it by '|' $Data = StringSplit(GUICtrlRead(GUICtrlRead($Listview1)),'|') If $Data[0] <> 7 Then Return $Selected_ID = $Data[1] GUICtrlSetData($Input2, $Data[2]) GUICtrlSetData($Input3, $Data[3]) If $Data[4] = '1' Then GUICtrlSetState($Checkbox2,$GUI_CHECKED) Else GUICtrlSetState($Checkbox2, $GUI_UNCHECKED) EndIf If $Data[5] = '1' Then GUICtrlSetState($Checkbox1,$GUI_CHECKED) Else GUICtrlSetState($Checkbox1, $GUI_UNCHECKED) EndIf EndIf EndFuncFunc _AddUser($iSocket) ;Enter a For loop to check all the users if there is a spot open. For $x = 1 to $MaxUsers ;If there is a spot open then If Not $User_List[$x][0] Then ;Set the user to that spot $User_List[$x][0] = $iSocket $User_List[$x][2] = _RandomString() $User_List[$x][3] = TimerInit() ;Send the user his unique key TCPSend($User_List[$x][0],_StringEncryptRC4( $User_List[$x][2], $Encrypt_Key)) Return 1 EndIf Next Return 0EndFuncFunc _RecvData() ;Enter a loop to check all the users. For $x = 1 To $MaxUsers If Not $User_List[$x][0] Then ContinueLoop ;Receive data from the users. $Recv = TCPRecv($User_List[$x][0],4096) ;If you dont get any data then skip the rest of the loop. If $Recv = "" Then ContinueLoop ;If @error then the user has problerly disconnected. If @error Then _DelSocket($User_List[$x][0]) $Recv = _StringDecryptRC4( $Recv, $User_List[$x][2]) If StringLeft($Recv,1) <> Chr(3) Then $Recv = _StringDecryptRC4( $Recv, $User_List[$x][4]) EndIf ;check if its time to update the users key, This proberly the best spot to add it aswell, after decrypting everything. If $Update_Key_Time > 0 And TimerDiff($User_List[$x][3]) > $Update_Key_Time Then _KeyGen($x) ;Split the data by when it was sent from the user. $Data = StringSplit(StringTrimLeft($Recv,1),Chr(1)) If Not IsArray($Data) then ContinueLoop ;Log the data. _ConsoleWrite("In|" & _TCPSocketToIP($User_List[$x][0]) & "|" & StringReplace(StringTrimLeft(StringTrimRight($Recv,1),1),Chr(2),"|") & @CRLF) ;Loop trought all the data from the user. For $y = 1 To UBound($Data)-1 ;Split that data to the real data we need. $Real_Data = StringSplit($Data[$y],Chr(2)) ;The data looks like this: Command chr(2) Parameter1 chr(2) Parameter2 chr(2) Parameter... ;check and see if we have enought data to work with. If $Real_data[0] < 2 Then ContinueLoop Switch $Real_Data[1] Case "Logon" ;To avoid people sending fake signales in a atempt to crash the server. If $Real_data[0] = 3 Then Switch _Login($Real_data[2], $Real_data[3], $x) Case 0 ;No such user or wrong password _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "fail",$User_List[$x][2]) _DelSocket($User_List) Case 1 ;User is banned _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "Ban",$User_List[$x][2]) _DelSocket($User_List) Case 2 ;User is already online _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "online",$User_List[$x][2]) _DelSocket($User_List) Case 3 ;User can login _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "ok" & Chr(2) & '0',$User_List[$x][2]) _SendAll("Adduser", $User_List[$x][1]) Case 4 ;Admin can login _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "ok" & Chr(2) & '1',$User_List[$x][2]) _SendAll("Adduser", $User_List[$x][1]) EndSwitch Else ;send him a message that he had some kind of error. _TCPSend($User_List[$x][0],"Logon" & Chr(2) & "error", $User_List[$x][2]) _DelSocket($User_List) EndIf Case "Register" ;check and see if the $Real_data array is safe to use. If $Real_data[0] = 3 Then Switch _CreateUser($Real_data[2], $Real_Data[3]) Case 0 ;else send him a message that that user is already in use. _TCPSend($User_List[$x][0],"Register" & Chr(2) & "fail", $User_List[$x][2]) _DelSocket($User_List[$x][0]) Case 1 ;else send him a message that that user is already in use. _TCPSend($User_List[$x][0],"Register" & Chr(2) & "invalid", $User_List[$x][2]) _DelSocket($User_List[$x][0]) Case 2 ;if not the send an ok message to the user. _TCPSend($User_List[$x][0],"Register" & Chr(2) & "ok", $User_List[$x][2]) _DelSocket($User_List[$x][0]) EndSwitch Else ;Send him a message that he had some kind of error. _TCPSend($User_List[$x][0],"Register" & Chr(2) & "error", $User_List[$x][2]) _DelSocket($User_List[$x][0]) EndIf Case "msg" ;If someone wants to chat then check we have enought options If $Real_data[0] = 3 Then _GUICtrlEdit_AppendText($Edit1,$User_List[$x][1] & ': ' & $Real_data[2] & @CRLF) ;send the message to them all. _SendAll( "message", $Real_data[2] & Chr(2) & $Real_Data[3], $User_List[$x][1]) EndIf Case "getuser" _SendUserList($User_List[$x][0],$User_List[$x][2]) Case "Bye" _DelSocket($User_List[$x][0]) Case "pm" If $Real_data[0] = 3 Then _Pm($User_List[$x][1],$Real_data[2], $Real_data[3]) Case "kick" ;To avoid people sending fake signales in a atempt to crash the server. If UBound($Real_Data) > 2 Then ;Check if the user that is trying to kick another user is admin. If _IsAdmin($User_List[$x][1]) = False Then ;the user was not a admin, Kick him from the server. _PM("Console",$User_List[$x][1],"You used a function you are now allowed to use.") _PM("Console",$User_List[$x][1],"You will now be kicked from the server.") _Kick($User_List[$x][1]) EndIf EndIf Case "Ban" ;To avoid people sending fake signales in a atempt to crash the server. If $Real_data[0] = 2 Then ;Check if the user that is trying to kick another user is admin. If _IsAdmin($User_List[$x][1]) = True Then ;check if the user we are trying to kick is admin or not. If _IsAdmin($Real_Data[2]) = False Then ;Ban him if he is not a admin. _Ban($Real_Data[2]) EndIf Else ;the user was not a admin, Kick him from the server. _PM("Console",$User_List[$x][1],"You used a function you are now allowed to use.") _PM("Console",$User_List[$x][1],"You will now be kicked from the server.") _Kick($User_List[$x][1]) EndIf EndIf Case "unban" ;To avoid people sending fake signales in a atempt to crash the server. If $Real_data[0] = 2 Then ;Check if the user that is trying to kick another user is admin. If _IsAdmin($User_List[$x][1]) = False Then ;check if the user we are trying to kick is admin or not. If _IsAdmin($Real_Data[2]) = True Then ;check if the user that we are trying to ban exists. _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT id FROM Accounts WHERE username = '" & StringUpper($Real_data[2]) & "';", $Query)) If _SQLite_FetchData($Query,$SQL_Data) = $SQLITE_OK Then _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB,"UPDATE Accounts SET ban = 0 WHERE username = '" & StringUpper($Real_Data[2]) & "';")) _TCPSend($User_List[$x][0],"Unban" & Chr(2) & "ok", $User_List[$x][2]) $User_Index = _GUICtrlListView_FindText($Listview1,$SQL_Data[0],-1, False) If $User_Index> -1 Then _GUICtrlListView_SetItemText($Listview1, $User_Index, '0', 4) Else _TCPSend($User_List[$x][0],"Unban" & Chr(2) & "nouser", $User_List[$x][2]) EndIf EndIf Else ;the user was not a admin, Kick him from the server. _PM("Console",$User_List[$x][1],"You used a function you are now allowed to use.") _PM("Console",$User_List[$x][1],"You will now be kicked from the server.") _Kick($User_List[$x][1]) EndIf EndIf Case Else ;Debug stuff. If $Real_Data[1] <> "" Then ConsoleWrite("Unknow Command: " & $Real_Data[1]) If $Real_Data[0] > 1 Then For $x = 2 To $Real_data[0] ConsoleWrite($Real_Data[$x] & ',' ) Next ConsoleWrite(@CRLF) EndIf EndIf EndSwitch Next Next ;Safely exit the function. Return 1EndFuncFunc _SendAll($sCommand,$sString, $sFrom="") ;Enter a loop For $x = 1 To $MaxUsers ;if there is a user on that socket then If $User_List[$x][0] <> 0 Then If $sFrom = "" Then ;Send the message to all the users. _TCPSend($User_List[$x][0], $sCommand & Chr(2) & $sString, $User_List[$x][2]) Else ;Send a message to all the user that a user said something and encrypt it. _TCPSend($User_List[$x][0],$sCommand & Chr(2) & $sFrom & Chr(2) & $sString, $User_List[$x][2]) EndIf EndIf Next Return 1EndFuncFunc _DelSocket($sSocket) ;enter a loop to check all the usersers. For $x = 1 to $MaxUsers ;If we hit the correct user then If $User_List[$x][0] = $sSocket Then ;Close his socket. TCPCloseSocket($User_List[$x][0]) ;Set his old array to 0 to make room for new people. $User_List[$x][0] = False ;if a username is register to the arry then. If $User_List[$x][1] <> "" Then ;tell the rest of the people to delete that user from the user list. _SendAll("Deluser", $User_List[$x][1]) ;Set the uers online status to 0. _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB, "UPDATE Accounts SET online = 0 WHERE username = '" & StringUpper($User_List[$x][1]) & "';")) ;Set the users/admins online for the console. If _IsAdmin($User_List[$x][1]) Then $Admins_Online -= 1 Else $Users_Online -= 1 EndIf _GUICtrlListBox_DeleteString($List1, _GUICtrlListBox_FindString($List1,$User_List[$x][1])) If $User_List[$x][5] > -1 Then _GUICtrlListView_SetItemText($Listview1, $User_List[$x][5], '0', 5) ;Set his username array to 0. $User_List[$x][1] = "" $User_List[$x][2] = 0 $User_List[$x][3] = "" $User_List[$x][4] = "" $User_List[$x][5] = -1 EndIf Return 1 EndIf NextEndFuncFunc _SendUserList($sSocket, $sKey) ;Enter a userlist loop. For $x = 1 To $MaxUsers ;if a username is register to the array then If $User_List[$x][1] <> "" Then GUICtrlSetData($List1, $User_List[$x][1]) ;send a message to the new user to add that user to his list. _TCPSend($sSocket, "adduser" & Chr(2) & $User_List[$x][1], $sKey) EndIf Next Return 1EndFuncFunc _Login($s_username, $s_password, $s_id) Local $Query, $SQL_Data _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT * FROM Accounts WHERE username='" & StringUpper($s_username) & "';", $Query)) If _SQLite_FetchData($Query, $SQL_Data) <> $SQLITE_OK Then Return 0 ElseIf $SQL_Data[4] = "1" Then;Check and see if he is banned form the server Return 1 ElseIf $SQL_Data[5] = "1" Then ;Check and see if there is a user with that account already online Return 2 ElseIf $SQL_Data[2] == $s_password Then ;If the user has the correct password the send him a message telling him that it was ok. $Admins_Online += $SQL_Data[3] $Users_Online += 1-$SQL_Data[3] _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB, "UPDATE Accounts SET online=1 WHERE username = '" & StringUpper($s_username) & "';")) If $SQL_Data[3] = 1 Then $s_username = "[A]" & $s_username ;Set that user to the $User_List array $User_List[$s_id][1] = $s_username $User_List[$s_id][5] = _GUICtrlListView_FindText($Listview1, $SQL_Data[0], -1, False) If $User_List[$s_id][5] > -1 Then _GUICtrlListView_SetItemText($Listview1, $User_List[$s_id][5], '1', 5) Return 3+$SQL_Data[3] EndIf Return 0EndFuncFunc _CreateUser($s_username, $s_password, $s_ban = 0, $s_admin = 0) If StringIsAlNum($s_username) = 0 Then Return 1 _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT id FROM Accounts WHERE username='" & $s_username & "';",$Query)) If _SQLite_FetchData($Query, $SQL_Data) <> $SQLITE_OK Then _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB,"INSERT INTO Accounts(username,password,admin,ban,online) VALUES ('" & StringUpper($s_username) & "','" & $s_password & "'," & $s_admin & "," & $s_ban & ",0);")) _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT * FROM Accounts WHERE username='" & StringUpper($s_username) & "';",$Query)) If _SQLite_FetchData($Query, $SQL_Data) = $SQLITE_OK Then GUICtrlCreateListViewItem($SQL_Data[0] & '|' & $SQL_Data[1] & '|' & $SQL_Data[2] & '|' & $SQL_Data[3] & '|' & $SQL_Data[4] & '|' & $SQL_Data[5], $Listview1) Else Return 0 EndIf Return 2EndFuncFunc _PM($sUserFrom,$sUserTo,$sMsg) ;Why send a message to your self?! If $sUserFrom <> $sUserTo And $sMsg <> '' Then ;Enter User Loop, you should know that buy now For $x = 1 to $MaxUsers ;check if the user its to is the user we are at in the loop If $User_List[$x][1] = $sUserTo Then ;Show it in the Console chat. GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & $User_List[$x][1] & ': ' & $sMsg & @CRLF) ;Send him a pm command, who its from and the message. _TCPSend($User_List[$x][0], "pm" & Chr(2) & $sUserFrom & Chr(2) & $sMsg, $User_List[$x][2]) Return True EndIf Next EndIf Return FalseEndFuncFunc _ConsoleWrite($s_Message) Local $s_time = '[' & @HOUR & ':' & @MIN & ':' & @SEC & ']|' ;Debuging. ConsoleWrite(StringReplace($s_time & $s_Message,'|',@TAB)) ;Write Log. FileWrite($Log_File,StringReplace($s_time & $s_Message,'|',@TAB)) ;Write to the console. GUICtrlCreateListViewItem($s_time & $s_Message, $Listview2) GUICtrlSetBkColor(-1,$Listview_Color) If $Listview_Color = 0xeeeeff Then $Listview_Color = 0xffffff Else $Listview_Color = 0xeeeeff EndIf EndFuncFunc _Kick($sUser) ;Enter User loop For $s_x = 1 To $MaxUsers ;check if this is the user we are looking for. If $User_List[$s_x][1] = $sUser Then ;If it was then send him the message. _TCPSend($User_List[$s_x][0],"Kick" & Chr(2) & "", $User_List[$s_x][2]) ;Remove him from the server _DelSocket($User_List[$s_x][0]) Return True EndIf Next Return FalseEndFuncFunc _Ban($sUser) ;Enter User loop For $x = 1 To $MaxUsers ;check if this is the user we are looking for. If $User_List[$x][1] = $sUser Then ;If it was then send him the message. _TCPSend($User_List[$x][0],"ban" & Chr(2) & "",$User_List[$x][2]) ;write to the database that he is banned. _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB,"UPDATE Accounts SET ban = 0 WHERE username = '" & StringUpper($sUser) & "';")) If $User_List[$x][5] > -1 Then _GUICtrlListView_SetItemText($Listview1, $User_List[$x][5], '1', 4) ;Remove him from the server _DelSocket($User_List[$x][0]) Return True EndIf Next Return FalseEndFuncFunc _KeyGen($s_id) ;generate new key. $Key = _RandomString() ;Send the new key to the user. _TCPSend($User_List[$s_id][0], "key" & Chr(2) & $Key, $User_List[$s_id][2]) ;Set the new key to the correct user $User_List[$s_id][4] = $User_List[$s_id][2] $User_List[$s_id][2] = $Key $User_List[$s_id][3] = TimerInit()EndFuncFunc _IsAdmin($sUser) _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT admin FROM Accounts WHERE username = '" & StringUpper($sUser) & "';",$Query)) If _SQLite_FetchData($Query,$SQL_Data) <> $SQLITE_OK Then Return False EndIf If $SQL_Data[0] = '1' Then Return True Else Return False EndIfEndFuncFunc _LoadDatabase() Local $Query, $SQL_Data _SQLite_QueryFinalize(_SQLite_Query($SQL_DB, "SELECT * FROM Accounts;", $Query)) While _SQLite_FetchData($Query, $SQL_Data) = $SQLITE_OK GUICtrlCreateListViewItem($SQL_Data[0] & '|' & $SQL_Data[1] & '|' & $SQL_Data[2] & '|' & $SQL_Data[3] & '|' & $SQL_Data[4] & '|' & $SQL_Data[5], $Listview1) WEnd ReturnEndFuncFunc _TCPSend($sSocket, $sData,$sEncryptKey) ;Char 3 is the signarture, if the recvied string dosent start with char 3 then use the old key. TCPSend($sSocket,_StringEncryptRC4( Chr(3) & $sData & Chr(1),$sEncryptKey)) ;Log/Debug _ConsoleWrite("Out|" & _TCPSocketToIP($sSocket) & "|" & StringReplace($sData,Chr(2),'|') & @CRLF)EndFuncFunc _TCPSocketToIP($iSocket) Local $pSocketAddress, $aReturn $pSocketAddress = DllStructCreate("short;ushort;uint;char[8]") $aReturn = DllCall("Ws2_32.dll", "int", "getpeername", "int", $iSocket, "ptr", DllStructGetPtr($pSocketAddress), "int*", DllStructGetSize($pSocketAddress)) If @error Or $aReturn[0] <> 0 Then Return 0 $aReturn = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($pSocketAddress, 3)) If @error Then Return 0 $pSocketAddress = 0 Return $aReturn[0] EndFuncFunc OnAutoitExit() FileClose($Log_File) ;Send a message to the users that we are shuting down the server _SendAll("Bye","") ;Shut down TCP. TCPShutdown() _SQLite_QueryFinalize(_SQLite_Exec($SQL_DB, "UPDATE Accounts SET online=0 WHERE online=1")) Sleep(1000) ;tried to remove the error, didnt help :s _SQLite_QueryFinalize($Query) _SQLite_Close($SQL_DB) ;Gives error sometimes -.- _SQLite_Shutdown()EndFuncYou can see I added _SQLite_QueryFinalize() to a few commands (not sure if that helps or hinders) but it didn't seem to make a difference more than once. Edited October 23, 2008 by dbzfanatic Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote]
dbzfanatic Posted October 24, 2008 Author Posted October 24, 2008 I hate to bump (really) but I want to get this out of the way and I've already tried everything I can think of short of writing my own code from the ground up (which I don't have enough TCP experience to do as of yet). If anyone can go through and look at the _SQLite statements and perhaps see where the problem is I'd be very grateful. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote]
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