Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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();
        }