public static string Connect(IPEndPoint EndPoint, out DateTime LastSeen) { LastSeen = DateTime.MinValue; if (EndPoint == null || EndPoint.Address == null) { return(""); } MySqlConnection ConX = null; bool openConX = ConX == null; if (openConX) { ConX = new MySqlConnection(DBOps.ConnectionString); ConX.Open(); } uint ip = IPEndPointExtensions.ToUint32(EndPoint); string hash = IPEndPointExtensions.CalculateHash(EndPoint); string sql = @"INSERT IGNORE INTO geo (ClientHash,IPAddress) VALUES (@ClientHash,@IPAddress);"; using (var cmd = new MySqlCommand(sql, ConX)) { cmd.Parameters.AddWithValue("ClientHash", hash); cmd.Parameters.AddWithValue("IPAddress", ip); cmd.ExecuteNonQuery(); cmd.CommandText = @"UPDATE geo gg JOIN geo g ON gg.ClientHash=g.ClientHash SET gg.IPAddress=@IPAddress WHERE g.IPAddress IS NULL AND g.Geo IS NULL AND g.ClientHash=@ClientHash;"; cmd.ExecuteNonQuery(); } sql = @"SELECT MAX(`Timestamp`) AS ts FROM stats WHERE ClientHash=@ClientHash;"; using (var cmd = new MySqlCommand(sql, ConX)) { cmd.Parameters.AddWithValue("ClientHash", hash); using (var rdr = cmd.ExecuteReader()) { while (rdr.Read()) { LastSeen = rdr.GetDateTimeSafe("ts"); break; } } } if (openConX) { ConX.Close(); } return(hash); }
public static bool Update(DateTime Timestamp, string IPAddress, int Page, int Frame) { if (Timestamp == DateTime.MinValue || string.IsNullOrWhiteSpace(IPAddress) || (Page < 0 && Frame < 0)) { return(false); } uint ip = IPEndPointExtensions.ToUint32(IPAddress); if (ip == 0) { return(false); } MySqlConnection ConX = null; bool openConX = ConX == null; if (openConX) { ConX = new MySqlConnection(DBOps.ConnectionString); ConX.Open(); } string hash = IPEndPointExtensions.CalculateHash(IPAddress); string sql = @"INSERT INTO stats (ClientHash,Timestamp,PageNo,FrameNo) VALUES (@ClientHash,@Timestamp,@PageNo,@FrameNo);"; var cmd = new MySqlCommand(sql, ConX); cmd.Parameters.AddWithValue("ClientHash", hash); cmd.Parameters.AddWithValue("Timestamp", Timestamp); cmd.Parameters.AddWithValue("PageNo", Page); cmd.Parameters.AddWithValue("FrameNo", Frame); cmd.ExecuteNonQuery(); if (openConX) { ConX.Close(); } return(true); }