private static void SaveCatalogRequest(string requestId, string userEmail, string processorEmail) { // Connect to DB SqlConnection conn = FoeServerDb.OpenDb(); SqlCommand cmd = conn.CreateCommand(); // Prepare and run query // Default status to 'P' (Pending) cmd.CommandText = "insert into Requests (RequestType, UserEmail, RequestId, ProcessorEmail, DtReceived, Status) " + "values (@requestType, @userEmail, @requestId, @processorEmail, @dtReceived, 'P')"; cmd.Parameters.Add("@requestType", System.Data.SqlDbType.NVarChar, 10); cmd.Parameters.Add("@userEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@requestId", System.Data.SqlDbType.NVarChar, 128); cmd.Parameters.Add("@processorEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@dtReceived", System.Data.SqlDbType.DateTime); cmd.Prepare(); cmd.Parameters["@requestType"].Value = FoeServerRequest.RequestTypeToString(RequestType.Catalog); cmd.Parameters["@userEmail"].Value = userEmail; cmd.Parameters["@requestId"].Value = requestId; cmd.Parameters["@processorEmail"].Value = processorEmail; cmd.Parameters["@dtReceived"].Value = DateTime.Now; cmd.ExecuteNonQuery(); conn.Close(); }
private static void SaveContentRequest(string requestId, string userEmail, string[] catalogs, string processorEmail) { // Connect to DB SqlConnection conn = FoeServerDb.OpenDb(); SqlCommand cmd = conn.CreateCommand(); // Prepare and run query // Default status to 'P' (Pending) cmd.CommandText = "insert into Requests (RequestType, UserEmail, RequestId, ProcessorEmail, RequestMessage, DtReceived, Status) " + "values (@requestType, @userEmail, @requestId, @processorEmail, @requestMessage, @dtReceived, 'P')"; cmd.Parameters.Add("@requestType", System.Data.SqlDbType.NVarChar, 10); cmd.Parameters.Add("@userEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@requestId", System.Data.SqlDbType.NVarChar, 128); cmd.Parameters.Add("@processorEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@requestMessage", System.Data.SqlDbType.NVarChar, -1); cmd.Parameters.Add("@dtReceived", System.Data.SqlDbType.DateTime); cmd.Prepare(); //message is {abc,def,ghi,}, so the last element of catalogs is "" for (int i = 0; i < catalogs.Length - 1; i++) { cmd.Parameters["@requestType"].Value = FoeServerRequest.RequestTypeToString(RequestType.Content); cmd.Parameters["@userEmail"].Value = userEmail; cmd.Parameters["@requestId"].Value = requestId; cmd.Parameters["@processorEmail"].Value = processorEmail; cmd.Parameters["@requestMessage"].Value = catalogs[i]; cmd.Parameters["@dtReceived"].Value = DateTime.Now; cmd.ExecuteNonQuery(); } conn.Close(); }
private static void SaveFeedRequest(string requestId, string userEmail, string[] array, string processorEmail) { // Connect to DB SqlConnection conn = FoeServerDb.OpenDb(); SqlCommand cmd = conn.CreateCommand(); string feedName = array[0]; string location = array[1]; // insert the feed to CatalogRss cmd.CommandText = "insert into CatalogRss (Code,Name,ContentType,Description,Location) " + "values (@code,@name,'RSS',@description,@location)"; cmd.Parameters.Add("@code", System.Data.SqlDbType.NVarChar, 10); cmd.Parameters.Add("@name", System.Data.SqlDbType.NVarChar, 32); cmd.Parameters.Add("@description", System.Data.SqlDbType.NVarChar, 512); cmd.Parameters.Add("@location", System.Data.SqlDbType.NVarChar, 512); cmd.Prepare(); cmd.Parameters["@code"].Value = feedName; cmd.Parameters["@name"].Value = feedName; cmd.Parameters["@description"].Value = feedName; cmd.Parameters["@location"].Value = location; cmd.ExecuteNonQuery(); // Prepare and run query // Default status to 'P' (Pending) cmd.CommandText = "insert into Requests (RequestType, UserEmail, RequestId, ProcessorEmail, DtReceived, Status) " + "values (@requestType, @userEmail, @requestId, @processorEmail, @dtReceived, 'P')"; cmd.Parameters.Add("@requestType", System.Data.SqlDbType.NVarChar, 10); cmd.Parameters.Add("@userEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@requestId", System.Data.SqlDbType.NVarChar, 128); cmd.Parameters.Add("@processorEmail", System.Data.SqlDbType.NVarChar, 256); cmd.Parameters.Add("@dtReceived", System.Data.SqlDbType.DateTime); cmd.Prepare(); cmd.Parameters["@requestType"].Value = FoeServerRequest.RequestTypeToString(RequestType.Feed); cmd.Parameters["@userEmail"].Value = userEmail; cmd.Parameters["@requestId"].Value = requestId; cmd.Parameters["@processorEmail"].Value = processorEmail; cmd.Parameters["@dtReceived"].Value = DateTime.Now; cmd.ExecuteNonQuery(); conn.Close(); }
private void DoCatalogDelivery() { //FoeDebug.Print("Loading requests..."); bool hasError = false; string message = ""; // Load content requests FoeRequester req = null; FoeServerRequest requestManager = new FoeServerRequest(RequestType.Catalog, FoeServerRegistry.Get("ProcessorEmail")); while ((req = requestManager.GetNextRequest()) != null) { //FoeDebug.Print("Processing request from " + req.UserEmail + " with request ID " + req.RequestId); // Check what contents are requested // Get user info FoeUser user = FoeServerUser.GetUser(req.UserEmail); if (user == null) { //FoeDebug.Print("User not registered. Skip this request."); //FoeDebug.Print("---------------------------------------"); // User is not registered, mark this request as "E" (Error) and skip to the next one requestManager.UpdateRequestStatus(req, "E"); FoeServerLog.Add(_processName, FoeServerLog.LogType.Warning, "User " + user.Email + " not registered. Discard content request."); continue; } //FoeDebug.Print("User verified."); // Process request List<CatalogItem> catalogs= FoeServerCatalog.GetCatalog(); // get all the catalogs on server if (catalogs != null) { //FoeDebug.Print("Generated Foe Message."); foreach (CatalogItem catalog in catalogs) { message += catalog.Code + ","; } // Send reply to user try { FoeServerMessage.SendMessage( FoeServerMessage.GetDefaultSmtpServer(), FoeServerRegistry.Get("ProcessorEmail"), req.UserEmail, SubjectGenerator.ReplySubject(RequestType.Catalog, req.RequestId, FoeServerUser.GetUser(req.UserEmail).UserId), message); //FoeDebug.Print("Sent reply to user."); } catch (Exception except) { //FoeDebug.Print("Error sending email."); //FoeDebug.Print(except.ToString()); hasError = true; FoeServerLog.Add(_processName, FoeServerLog.LogType.Error, "Error delivering content to " + user.Email + "\r\n" + except.ToString()); } } // If there is no error, then we'll mark the request as 'C' (Completed). // Otherwise, we'll leave it as 'P' (Pending). if (!hasError) { // mark request as "C" (Completed) requestManager.UpdateRequestStatus(req, "C"); FoeServerLog.Add(_processName, FoeServerLog.LogType.Message, "Sent " + message + "to " + user.Email + " and added user to AutoSubscription."); //FoeDebug.Print("Marked request as 'C' (Completed)."); //FoeDebug.Print("----------------------------------"); } else { //FoeDebug.Print("Leave request as 'P' (Pending)."); //FoeDebug.Print("-------------------------------"); FoeServerLog.Add(_processName, FoeServerLog.LogType.Error, "Error delivering content but error is likely caused by temporary email downtime. " + "Leave status as 'P' (Pending) so process can try again later."); } } // Close all requestManager connections requestManager.Close(); }