aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAdam Frisby2007-05-30 02:36:48 +0000
committerAdam Frisby2007-05-30 02:36:48 +0000
commitb0de1b93f9ddc7a111d72ea03eae32ff486089a1 (patch)
tree7286e30966ce16fde5d2f03a2612725fec5c85be
parentAnother rebuild of the build files! :O (diff)
downloadopensim-SC-b0de1b93f9ddc7a111d72ea03eae32ff486089a1.zip
opensim-SC-b0de1b93f9ddc7a111d72ea03eae32ff486089a1.tar.gz
opensim-SC-b0de1b93f9ddc7a111d72ea03eae32ff486089a1.tar.bz2
opensim-SC-b0de1b93f9ddc7a111d72ea03eae32ff486089a1.tar.xz
* Added reconnect support for MySQL Data interfaces if they time out. (Grid/User modes only now, Log todo)
* Begun writing support for supporting the "Start" region login parameter.
-rw-r--r--OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLGridData.cs3
-rw-r--r--OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLManager.cs68
-rw-r--r--OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLUserData.cs3
-rw-r--r--OpenGridServices/OpenGridServices.UserServer/UserManager.cs17
4 files changed, 85 insertions, 6 deletions
diff --git a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLGridData.cs b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLGridData.cs
index 6ac8cc3..5006aaf 100644
--- a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLGridData.cs
+++ b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLGridData.cs
@@ -75,6 +75,7 @@ namespace OpenGrid.Framework.Data.MySQL
75 } 75 }
76 catch (Exception e) 76 catch (Exception e)
77 { 77 {
78 database.Reconnect();
78 Console.WriteLine(e.ToString()); 79 Console.WriteLine(e.ToString());
79 return null; 80 return null;
80 } 81 }
@@ -106,6 +107,7 @@ namespace OpenGrid.Framework.Data.MySQL
106 } 107 }
107 catch (Exception e) 108 catch (Exception e)
108 { 109 {
110 database.Reconnect();
109 Console.WriteLine(e.ToString()); 111 Console.WriteLine(e.ToString());
110 return null; 112 return null;
111 } 113 }
@@ -137,6 +139,7 @@ namespace OpenGrid.Framework.Data.MySQL
137 } 139 }
138 catch (Exception e) 140 catch (Exception e)
139 { 141 {
142 database.Reconnect();
140 Console.WriteLine(e.ToString()); 143 Console.WriteLine(e.ToString());
141 return null; 144 return null;
142 } 145 }
diff --git a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLManager.cs b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLManager.cs
index aee18b9..2eaa158 100644
--- a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLManager.cs
+++ b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLManager.cs
@@ -16,6 +16,7 @@ namespace OpenGrid.Framework.Data.MySQL
16 class MySQLManager 16 class MySQLManager
17 { 17 {
18 IDbConnection dbcon; 18 IDbConnection dbcon;
19 string connectionString;
19 20
20 /// <summary> 21 /// <summary>
21 /// Initialises and creates a new MySQL connection and maintains it. 22 /// Initialises and creates a new MySQL connection and maintains it.
@@ -29,7 +30,7 @@ namespace OpenGrid.Framework.Data.MySQL
29 { 30 {
30 try 31 try
31 { 32 {
32 string connectionString = "Server=" + hostname + ";Port=" + port + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";"; 33 connectionString = "Server=" + hostname + ";Port=" + port + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";";
33 dbcon = new MySqlConnection(connectionString); 34 dbcon = new MySqlConnection(connectionString);
34 35
35 dbcon.Open(); 36 dbcon.Open();
@@ -52,6 +53,28 @@ namespace OpenGrid.Framework.Data.MySQL
52 } 53 }
53 54
54 /// <summary> 55 /// <summary>
56 /// Reconnects to the database
57 /// </summary>
58 public void Reconnect()
59 {
60 lock (dbcon)
61 {
62 try
63 {
64 // Close the DB connection
65 dbcon.Close();
66 // Try reopen it
67 dbcon = new MySqlConnection(connectionString);
68 dbcon.Open();
69 }
70 catch (Exception e)
71 {
72 Console.WriteLine("Unable to reconnect to database " + e.ToString());
73 }
74 }
75 }
76
77 /// <summary>
55 /// Runs a query with protection against SQL Injection by using parameterised input. 78 /// Runs a query with protection against SQL Injection by using parameterised input.
56 /// </summary> 79 /// </summary>
57 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param> 80 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
@@ -70,10 +93,47 @@ namespace OpenGrid.Framework.Data.MySQL
70 93
71 return (IDbCommand)dbcommand; 94 return (IDbCommand)dbcommand;
72 } 95 }
73 catch (Exception e) 96 catch
74 { 97 {
75 Console.WriteLine("Failed during Query generation: " + e.ToString()); 98 lock (dbcon)
76 return null; 99 {
100 // Close the DB connection
101 try
102 {
103 dbcon.Close();
104 }
105 catch { }
106
107 // Try reopen it
108 try
109 {
110 dbcon = new MySqlConnection(connectionString);
111 dbcon.Open();
112 }
113 catch (Exception e)
114 {
115 Console.WriteLine("Unable to reconnect to database " + e.ToString());
116 }
117
118 // Run the query again
119 try
120 {
121 MySqlCommand dbcommand = (MySqlCommand)dbcon.CreateCommand();
122 dbcommand.CommandText = sql;
123 foreach (KeyValuePair<string, string> param in parameters)
124 {
125 dbcommand.Parameters.Add(param.Key, param.Value);
126 }
127
128 return (IDbCommand)dbcommand;
129 }
130 catch (Exception e)
131 {
132 // Return null if it fails.
133 Console.WriteLine("Failed during Query generation: " + e.ToString());
134 return null;
135 }
136 }
77 } 137 }
78 } 138 }
79 139
diff --git a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLUserData.cs b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLUserData.cs
index 57dbfc6..6f3cad6 100644
--- a/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLUserData.cs
+++ b/OpenGridServices/OpenGrid.Framework.Data.MySQL/MySQLUserData.cs
@@ -51,6 +51,7 @@ namespace OpenGrid.Framework.Data.MySQL
51 } 51 }
52 catch (Exception e) 52 catch (Exception e)
53 { 53 {
54 database.Reconnect();
54 Console.WriteLine(e.ToString()); 55 Console.WriteLine(e.ToString());
55 return null; 56 return null;
56 } 57 }
@@ -78,6 +79,7 @@ namespace OpenGrid.Framework.Data.MySQL
78 } 79 }
79 catch (Exception e) 80 catch (Exception e)
80 { 81 {
82 database.Reconnect();
81 Console.WriteLine(e.ToString()); 83 Console.WriteLine(e.ToString());
82 return null; 84 return null;
83 } 85 }
@@ -116,6 +118,7 @@ namespace OpenGrid.Framework.Data.MySQL
116 } 118 }
117 catch (Exception e) 119 catch (Exception e)
118 { 120 {
121 database.Reconnect();
119 Console.WriteLine(e.ToString()); 122 Console.WriteLine(e.ToString());
120 return null; 123 return null;
121 } 124 }
diff --git a/OpenGridServices/OpenGridServices.UserServer/UserManager.cs b/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
index cd80621..21ecc50 100644
--- a/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
+++ b/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
@@ -395,10 +395,23 @@ namespace OpenGridServices.UserServer
395 // If user specified additional start, use that 395 // If user specified additional start, use that
396 if (requestData.ContainsKey("start")) 396 if (requestData.ContainsKey("start"))
397 { 397 {
398 string startLoc = (string)requestData["start"]; 398 string startLoc = ((string)requestData["start"]).Trim();
399 if (!(startLoc == "last" || startLoc == "home")) 399 if (!(startLoc == "last" || startLoc == "home"))
400 { 400 {
401 // Ignore it! Heh. 401 // Format: uri:Ahern&162&213&34
402 try
403 {
404 string[] parts = startLoc.Remove(0, 4).Split('&');
405 string region = parts[0];
406
407 ////////////////////////////////////////////////////
408 //SimProfile SimInfo = new SimProfile();
409 //SimInfo = SimInfo.LoadFromGrid(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey);
410 }
411 catch (Exception e)
412 {
413
414 }
402 } 415 }
403 } 416 }
404 417