dbzfanatic Posted October 23, 2008 Share 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] Link to comment Share on other sites More sharing options...
ptrex Posted October 23, 2008 Share 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 Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 23, 2008 Author Share 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] Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 24, 2008 Author Share 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] Link to comment Share on other sites More sharing options...
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