Property changes on: . ___________________________________________________________________ Added: svn:ignore + LFSLapper.csproj LFSLapper.csproj.user LFSLapper.sln LFSLapper.suo bin obj Index: cfgparser/readCfg.cs =================================================================== --- cfgparser/readCfg.cs (revision 12) +++ cfgparser/readCfg.cs (working copy) @@ -114,6 +114,7 @@ public string WorkingDir; public string superUsers; public string StoredValueDbs; + public string LapperDatabase = "./LapperDB"; public string AdminFile = "./admin.txt"; public string TrackInfoFile; public bool TCPmode = true; @@ -134,7 +135,7 @@ // public string SyncID = ""; // public string SyncDir = ""; // public string SyncIDsToSync = ""; - public string DefaultTopCar; + public string DefaultTopCar = ""; public string PubStatIdk = ""; // AUthorization public string Auth1 = ""; Index: Dbs/storeddbs.cs =================================================================== --- Dbs/storeddbs.cs (revision 12) +++ Dbs/storeddbs.cs (working copy) @@ -448,4 +448,115 @@ } + // New Lapper data storage class. Simplifies user & race data - Krayy + public class LapperDbs + { + private static Mutex mut = new Mutex(); + public DbsAccess dbCon; + private GLDebug.Debug myDebug; + public LapperDbs(GLDebug.Debug pmyDebug,string DbName) + { + string sql; + this.myDebug = pmyDebug; + dbCon = new DbsAccess( myDebug,DbName); + + if (!dbCon.isExistTable("ldb_user_data")) + { + myDebug.WriteLine("mss", "Table creation ldb_user_data"); + sql = "CREATE TABLE ldb_user_data ( " + + " idUserData INTEGER PRIMARY KEY NOT NULL DEFAULT ''" + + ",userName CHAR( 20 )" + + ",key CHAR( 50 )" + + ",value CHAR( 100 )" + + ")"; + dbCon.executeNonQuery(sql); + + sql = "CREATE UNIQUE INDEX i_ldb_user_data1 ON ldb_user_data( userName,key )"; + dbCon.executeNonQuery(sql); + sql = "CREATE INDEX i_ldb_user_data2 ON ldb_user_data( userName )"; + dbCon.executeNonQuery(sql); + } + } + public void lockBase() + { + mut.WaitOne(); + } + public void unlockBase() + { + mut.ReleaseMutex(); + } + // Retrieve a user number - Krayy + public string LdbRetreiveUserNum( string userName, string key ) + { + string value = "0"; + dbCon.executeNonQuery("BEGIN TRANSACTION"); + string sql = "SELECT value FROM ldb_user_data WHERE " + + "key = '" + key + "'" + + " AND userName = '" + userName.ToLower() + "'"; + IDataReader retQuery = dbCon.executeQuery(sql); + + if (retQuery.Read()) + value = retQuery.GetString(0); + + dbCon.executeNonQuery("COMMIT TRANSACTION"); + + return value; + } + // Retrieve a user string - Krayy + public string LdbRetreiveUserStr( string userName, string key ) + { + string value = ""; + dbCon.executeNonQuery("BEGIN TRANSACTION"); + string sql = "SELECT value FROM ldb_user_data WHERE " + + "key = '" + key + "'" + + " AND userName = '" + userName.ToLower() + "'"; + IDataReader retQuery = dbCon.executeQuery(sql); + + if (retQuery.Read()) + value = retQuery.GetString(0); + + dbCon.executeNonQuery("COMMIT TRANSACTION"); + + return value; + } + // Update a user var, regardless of type - Krayy + public void LdbUpdateUserVar(string userName, string key, string value) + { + long idUserData; + if (userName != "") + { + lockBase(); // Lock the database for write + userName = userName.ToLower(); + dbCon.executeNonQuery("BEGIN TRANSACTION"); + string sql = "SELECT idUserData FROM ldb_user_data WHERE " + + "key = '" + key + "'" + + " AND userName = '" + userName + "'" + ; + IDataReader retQuery = dbCon.executeQuery(sql); + if (retQuery.Read()) + { + idUserData = retQuery.GetInt64(0); + + sql = "UPDATE ldb_user_data SET "; + sql = sql + " value = '" + value + "'"; + sql = sql + " WHERE idUserData = " + idUserData; + dbCon.executeNonQuery(sql); + } + else + { + dbCon.executeNonQuery("INSERT INTO ldb_user_data (" + + "userName" + + ",key" + + ",value" + + ") VALUES (" + + "'" + userName + "'" + + ",'" + key + "'" + + ",'" + value + "'" + + ")"); + } + dbCon.executeNonQuery("COMMIT TRANSACTION"); + unlockBase(); // Unlock DB after write + } + } + } } Index: LFSClient/lfsclient.cs =================================================================== --- LFSClient/lfsclient.cs (revision 12) +++ LFSClient/lfsclient.cs (working copy) @@ -85,6 +85,7 @@ public LFSDbs.gripDbs gripSqlDbs; public LFSDbs.driftDbs driftSqlDbs; public LFSDbs.storedDbs storedSqlDbs; + public LFSDbs.LapperDbs LapperSqlDbs; public string connectIP = ""; public int connectPort = 0; @@ -327,6 +328,7 @@ newCfg.varsLapper.GripDatabase = pWorkingDir + "/" + newCfg.varsLapper.GripDatabase; newCfg.varsLapper.DriftDatabase = pWorkingDir + "/" + newCfg.varsLapper.DriftDatabase; newCfg.varsLapper.StoredValueDbs = pWorkingDir + "/" + newCfg.varsLapper.StoredValueDbs; + newCfg.varsLapper.LapperDatabase = pWorkingDir + "/" + newCfg.varsLapper.LapperDatabase; newCfg.varsLapper.TrackInfoFile = pWorkingDir + "/" + newCfg.varsLapper.TrackInfoFile; if (newCfg.varsLapper.LapTimeUsedForPb < 1) @@ -558,6 +560,7 @@ gripSqlDbs = new LFSDbs.gripDbs(myDebug,uniqueConnectionId, newCfg.varsLapper.GripDatabase, newCfg.varsLapper.LapTimeUsedForPb, newCfg.varsLapper.FtpServer, newCfg.varsLapper.FtpLogin, newCfg.varsLapper.FtpPasswd, newCfg.varsLapper.FtpRemotePath, newCfg.varsLapper.DateFormat); driftSqlDbs = new LFSDbs.driftDbs(myDebug, uniqueConnectionId,newCfg.varsLapper.DriftDatabase, newCfg.varsLapper.FtpServer, newCfg.varsLapper.FtpLogin, newCfg.varsLapper.FtpPasswd, newCfg.varsLapper.FtpRemotePath, newCfg.varsLapper.DateFormat); storedSqlDbs = new LFSDbs.storedDbs(myDebug, newCfg.varsLapper.StoredValueDbs); + LapperSqlDbs = new LFSDbs.LapperDbs(myDebug, newCfg.varsLapper.LapperDatabase); #region Qualification @@ -653,6 +656,11 @@ storedSqlDbs.dbCon.dbCon.Close(); storedSqlDbs.dbCon.dbCon.Dispose(); } + if (LapperSqlDbs != null) + { + LapperSqlDbs.dbCon.dbCon.Close(); + LapperSqlDbs.dbCon.dbCon.Dispose(); + } byte[] terreq = myEncoder.ISC(); if (insimConnection != null) { Index: LFSClient/managePacket.cs =================================================================== --- LFSClient/managePacket.cs (revision 12) +++ LFSClient/managePacket.cs (working copy) @@ -43,7 +43,7 @@ { infoPlayer currInfoPlayer; - listOfPlayers.newPlayer(newConnection.UCID, newConnection.userName, newConnection.nickName, newConnection.Flags, insimConnection.Product); + listOfPlayers.addNewPlayer(newConnection.UCID, newConnection.userName, newConnection.nickName, newConnection.Flags, insimConnection.Product); currInfoPlayer = listOfPlayers.getPlayerByUCID(newConnection.UCID); if (currInfoPlayer == null) return; @@ -62,6 +62,9 @@ else currInfoPlayer.allowIdleOnTrack = false; + // Update user database fields + LapperSqlDbs.LdbUpdateUserVar( currInfoPlayer.userName, "nickName", currInfoPlayer.nickName ); + objPubStatUserPB.retreiveUserPb(currInfoPlayer.userName); newCfg.executeFunction("OnConnect", currInfoPlayer,null); @@ -255,7 +258,6 @@ { infoPlayer currInfoPlayer; - currInfoPlayer = listOfPlayers.getPlayerByUCID(cpr.UCID); if (currInfoPlayer == null) return; @@ -267,6 +269,10 @@ string oldNickName = currInfoPlayer.nickName; currInfoPlayer.Rename(cpr.newNickName); + + // Update user database fields + LapperSqlDbs.LdbUpdateUserVar( currInfoPlayer.userName, "nickName", currInfoPlayer.nickName ); + if (currInfoPlayer.demoPlayer) { if (currInfoPlayer.CName == "") @@ -613,7 +619,7 @@ { userGroups ugroup = new userGroups( myDebug ); ugroup.addUserFromFile("superUsers", newCfg.varsLapper.WorkingDir + "/" + newCfg.varsLapper.superUsers); - if (ugroup.userExist("superUsers", currInfoPlayer.userName.ToLower())) + if ((ugroup.userExist("superUsers", currInfoPlayer.userName.ToLower())) || (currInfoPlayer.UCID == 0)) { this.TermProg = true; SendMsgToConnection(currInfoPlayer.UCID, "Go to stand by mode!"); @@ -628,7 +634,7 @@ { userGroups ugroup = new userGroups( myDebug ); ugroup.addUserFromFile("superUsers", newCfg.varsLapper.WorkingDir + "/" + newCfg.varsLapper.superUsers); - if (ugroup.userExist("superUsers", currInfoPlayer.userName.ToLower())) + if ((ugroup.userExist("superUsers", currInfoPlayer.userName.ToLower())) || (currInfoPlayer.UCID == 0)) { this.TermProg = true; this.RestartProg = true; Index: LFSClient/parseEvent.cs =================================================================== --- LFSClient/parseEvent.cs (revision 12) +++ LFSClient/parseEvent.cs (working copy) @@ -604,10 +604,7 @@ break; case "finishedpos": val.typVal = GLScript.typVal.num; - if (currInfoPlayer.finishedPos != -1) - { - val.fval = (float)currInfoPlayer.finishedPos + 1; - } + val.fval = (float)currInfoPlayer.finishedPos + 1; break; case "racetotaltime": val.typVal = GLScript.typVal.num; @@ -815,6 +812,19 @@ throw new GLScript.GLApp.GLScriptException("You can't use " + ident + " in this context, not a player event"); closeAllTop(currInfoPlayer); break; + case "usermsg": + { + testArgs(ident, "SSS", args); + currInfoPlayer = listOfPlayers.getPlayerByUserName((string)args[1]); + if (currInfoPlayer == null) + throw new GLScript.GLApp.GLScriptException("You can't use " + ident + " in this context, not a player event"); + string text = args[2].ToString(); + if (text == "[[TranslateEngine]]") + text = lfsLang.replaceParmsLangStr(currInfoPlayer.idLang); + SendMsgToConnection(currInfoPlayer.UCID, "^6Personal msg from: ^8" + (string)args[0]); + SendMsgToConnection(currInfoPlayer.UCID, "^7" + text ); + break; + } case "privmsg": { testArgs(ident, "S", args); @@ -1100,20 +1110,63 @@ showConfigPlayer(currInfoPlayer); break; case "setuserstoredvalue": + case "setstoreduservar": // Krayy - New function to store a user value in LapperDB if (currInfoPlayer == null) throw new GLScript.GLApp.GLScriptException("You can't use " + ident + " in this context, not a player event"); - testArgs(ident, "SI", args); - storedSqlDbs.updateRowUser( args[0].ToString(), currInfoPlayer.userName,currInfoPlayer.nickName, float.Parse( args[1].ToString() )); + if (args.Count > 2) + { + testArgs(ident, "SSS", args); + val.typVal = GLScript.typVal.str; + LapperSqlDbs.LdbUpdateUserVar( args[0].ToString(), args[1].ToString(),args[2].ToString() ); + } + else + { + testArgs(ident, "SS", args); + val.typVal = GLScript.typVal.str; + LapperSqlDbs.LdbUpdateUserVar( currInfoPlayer.userName, args[0].ToString(),args[1].ToString() ); + } break; - case "getuserstoredvalue": + case "getstoreduserstr": // Krayy - New function to retrieve a user string from LapperDB if (currInfoPlayer == null) throw new GLScript.GLApp.GLScriptException("You can't use " + ident + " in this context, not a player event"); - testArgs(ident, "S", args); - val.typVal = GLScript.typVal.str; - val.sval = quote(storedSqlDbs.retreiveRowUser(args[0].ToString(), currInfoPlayer.userName )); + if (args.Count > 1) + { + testArgs(ident, "SS", args); + val.typVal = GLScript.typVal.str; + val.sval = quote(LapperSqlDbs.LdbRetreiveUserStr(args[0].ToString(), args[1].ToString())); + } + else + { + testArgs(ident, "S", args); + val.typVal = GLScript.typVal.str; + val.sval = quote(LapperSqlDbs.LdbRetreiveUserStr(currInfoPlayer.userName, args[0].ToString())); + } return; - + case "getstoredusernum": // Krayy - New function to retrieve a user int from LapperDB + if (currInfoPlayer == null) + throw new GLScript.GLApp.GLScriptException("You can't use " + ident + " in this context, not a player event"); + string tempStr; + if (args.Count > 1) + { + testArgs(ident, "SS", args); + tempStr = LapperSqlDbs.LdbRetreiveUserNum(args[0].ToString(), args[1].ToString()); + } + else + { + testArgs(ident, "S", args); + tempStr = LapperSqlDbs.LdbRetreiveUserNum(currInfoPlayer.userName, args[0].ToString()); + } + val.typVal = GLScript.typVal.num; + try + { + val.fval = float.Parse(tempStr); + } + catch + { + val.fval = 0; + } + return; case "openglobalbutton": if (args.Count == 9) args.Add(""); @@ -1175,6 +1228,10 @@ testArgs(ident, "SS", args); uGroup.addUser(args[0].ToString(), args[1].ToString()); break; + case "savegrouptofile": + testArgs(ident, "SS", args); + uGroup.saveUsersToFile(args[0].ToString(),newCfg.varsLapper.WorkingDir + "/" + args[1].ToString()); + break; case "usergroupfromfile": testArgs(ident, "SS", args); uGroup.clear( args[0].ToString()); @@ -1184,6 +1241,11 @@ testArgs(ident, "SS", args); uGroup.removeUser(args[0].ToString(), args[1].ToString()); break; + case "listgroupusers": + testArgs(ident, "S", args); + val.typVal = GLScript.typVal.str; + val.sval = quote(uGroup.listUsersInGroup(args[0].ToString())); + return; case "cleargroup": testArgs(ident, "S", args); uGroup.clear(args[0].ToString()); @@ -1191,14 +1253,13 @@ case "userisadmin": testArgs(ident, "S", args); val.typVal = GLScript.typVal.num; - uGroup.clear( "admin"); + uGroup.clear("admin"); uGroup.addUserFromFile("admin",newCfg.varsLapper.WorkingDir + "/" + newCfg.varsLapper.AdminFile ); if (uGroup.userExist("admin", args[0].ToString()) || currInfoPlayer.UCID == 0) val.fval = 1; else val.fval = 0; return; - case "useringroup": testArgs(ident, "SS", args); val.typVal = GLScript.typVal.num; @@ -1206,7 +1267,6 @@ val.fval = 1; else val.fval = 0; - return; case "getusergrippb": val.typVal = GLScript.typVal.num; @@ -1218,12 +1278,14 @@ break; case "setstoredvalue": testArgs(ident, "SS", args); - storedSqlDbs.updateRow(args[0].ToString(), args[1].ToString()); +// storedSqlDbs.updateRow(args[0].ToString(), args[1].ToString()); + LapperSqlDbs.LdbUpdateUserVar( "__lappervar__", args[0].ToString(),args[1].ToString() ); break; case "getstoredvalue": testArgs(ident, "S", args); val.typVal = GLScript.typVal.str; - val.sval = quote(storedSqlDbs.retreiveRow(args[0].ToString())); +// val.sval = quote(storedSqlDbs.retreiveRow(args[0].ToString())); + val.sval = quote(LapperSqlDbs.LdbRetreiveUserStr("__lappervar__", args[0].ToString())); return; case "delayedcommand": testArgs(ident, "IS", args);