Esempio n. 1
0
        public bool SendMessage(ReqSendMessage req)
        {
            Job j = new Job();

            j.Command           = JobCommands.CCSendMessage;
            j.Executer          = JobExecuters.Machine;
            j.Name              = "to " + (req.Email.IsEmpty() ? "member " + req.MemberId : req.Email);
            j.RelatedEntityName = "CCMessageTemplate";
            j.RelatedEntityId   = req.TemplateId;
            j.StartDate         = req.SendDate;
            j.Save();

            JobData jd = new JobData();

            jd.Request  = req.ToJSON();
            jd.JobId    = j.Id;
            jd.Response = "";
            jd.Save();

            return(true);
        }
Esempio n. 2
0
        public ActionResult <ResponseObject <Message> > Post(ReqSendMessage request)
        {
            if (request == null)
            {
                return(BadRequest());
            }

            if (request.UserGuid == null)
            {
                return(BadRequest());
            }

            var matchUser = Chat.Users.FirstOrDefault(x => x.Guid == request.UserGuid);

            if (matchUser == null)
            {
                return(new ObjectResult(new ResponseBase(401, "Не удалось найти пользователя по указанному токенту доступа")));
            }

            // OK
            var msg = new Message
            {
                Id     = Chat.Messages.Count,
                Text   = request.Message,
                UserId = matchUser.Id,
                Author = matchUser,
                Date   = DateTime.Now,
            };

            // Добавление сообщения
            Chat.Messages.Add(msg);

            // Сообщаем (почти) всем клиентам лонг пулинга что есть данные
            Chat.SetUpdate(msg, UpdateTypes.Add, matchUser);

            return(new ObjectResult(new ResponseObject <Message>(msg)));
            //return new ResponseBase();
        }
Esempio n. 3
0
 public bool SendMessage(ReqSendMessage req)
 {
     return(Call <bool, ReqSendMessage>(req, MethodBase.GetCurrentMethod().Name));
 }
Esempio n. 4
0
        private void SendMessage(Job job)
        {
            JobData jd = Provider.Database.Read <JobData>("JobId={0}", job.Id);

            if (jd == null)
            {
                throw new Exception("CCSendMessage jobs should have corresponding JobData. This one doesn't.");
            }

            ReqSendMessage req = JsonConvert.DeserializeObject <ReqSendMessage>(jd.Request);

            // CCMessageTemplate
            var msgTemplate = Provider.Database.Read <CCMessageTemplate>("Id={0}", job.RelatedEntityId);

            if (msgTemplate == null)
            {
                throw new Exception("CCMessageTemplate record not found");
            }
            // CCMessageGroup
            var msgMsgGroup = Provider.Database.Read <CCMessageGroup>("Id = {0}", msgTemplate.CCMessageGroupId);

            if (msgMsgGroup == null)
            {
                throw new Exception("CCProfile record not found");
            }
            // CCProfile
            var msgProfile = Provider.Database.Read <CCProfile>("Id={0}", msgMsgGroup.CCProfileId);

            if (msgProfile == null)
            {
                throw new Exception("CCProfile record not found");
            }
            // Client
            var client = Provider.Database.Read <Client>("Id = {0}", msgProfile.ClientId);

            if (msgProfile == null)
            {
                throw new Exception("Client record not found");
            }



            // 1. template'i veritabanından oku
            //string[] arr = job.CommandParameter.Split(new string[] { "___" }, StringSplitOptions.None);
            //string sqlPrm = arr[0];
            //string memberId = arr[1];

            string msgBody = "";

            if (req.SqlParam != "")
            {
                // 2. SqlCommand'dan parametre ile script engine marifetiyle SQL'i elde et
                var engine = new Interpreter(msgTemplate.SqlCommand, new List <string>());
                engine.SetAttribute("SqlParam", req.SqlParam);
                engine.SetAttribute("Parameters", req.Parameters);
                engine.Parse();
                engine.Execute();

                // 3. SQL'i çalıştır, sonucu DataRow olarak al
                string sql = engine.Output;
                //DataRow rs = Provider.Database.GetDataRow(sql);
                DataRow rs = GetDataRow(sql, client.ConnectionStrings);

                // 4. Message alanındaki HTML'i script engine ve datarow'u kullanarak mesaj metnine dönüştür
                var engine2 = new Interpreter(msgTemplate.Message, new List <string>());
                engine2.SetAttribute("rs", rs);
                engine2.SetAttribute("Parameters", req.Parameters);
                engine2.Parse();
                engine2.Execute();

                msgBody = engine2.Output;
            }
            else
            {
                msgBody = msgTemplate.Message;
            }



            string msgSubject = "";

            if (!req.AddMessage.IsEmpty())                              // 3.parametre varsa dışardan mesaj gelmiştir
            {
                msgBody    = msgBody.Replace("$=msg$", req.AddMessage); // gönderilen mesajı ekle
                msgSubject = req.AddSubject.IsEmpty() ? "" : req.AddSubject;
            }


            // 5. Profil'i kullanarak mesajı gönder
            //  var msgMember = Provider.Database.Read<Member>("Id = {0}", memberId);
            string eMail       = "";
            string nameSurname = "";
            string phone       = "";

            if (!req.Email.IsEmpty()) // memberId 'nin içinde '@' varsa maildir.
            {
                eMail       = req.Email;
                nameSurname = req.Email;
            }
            else
            {
                var msgMember = GetMemberRow(req.MemberId, client.ConnectionStrings);
                if (msgMember == null)
                {
                    throw new Exception("Members record not found");
                }

                // Member Info
                eMail       = msgMember["EMail"].ToString();
                nameSurname = msgMember["NameSurname"].ToString();
                phone       = msgMember["Phone2"].ToString();
            }

            // JobName
            job.Name = eMail;

            if (msgProfile.ProfileType == ProfileType.Email)
            {
                var emailSocket = Provider.Database.Read <CCEmailSocket>("Id = {0}", msgProfile.CCEmailSocketId);
                if (emailSocket == null)
                {
                    throw new Exception("CCEmailSocket record not found");
                }


                string sendMail = (!string.IsNullOrEmpty(msgProfile.SendMail))
                    ? msgProfile.SendMail
                    : emailSocket.Username;


                // e-mail için kodlar
                Utility.SendMail(sendMail, msgProfile.SendName, eMail, nameSurname,
                                 (msgSubject.Trim() == "") ? msgTemplate.Subject : msgSubject, msgBody, emailSocket.Host, emailSocket.Port, emailSocket.Username,
                                 emailSocket.Password, null, emailSocket.EnableSsl);
            }
            else if (msgProfile.ProfileType == ProfileType.Sms)
            {
                var smsSocket = Provider.Database.Read <CCSmsSocket>("Id = {0}", msgProfile.CCSmsSocketId);
                if (smsSocket == null)
                {
                    throw new Exception("CCEmailSocket record not found");
                }

                // sms için kodlar
                var      sms    = new SendSms(smsSocket.Username, smsSocket.Password, smsSocket.ApiId);
                String[] number = { phone };

                sms.addSMS(msgBody, number);
                sms.gonder();
            }
            else
            {
                throw new Exception("ProfileType record not found");
            }


            // 6. SentMessage tablosuna gönderilen mesajı logla
            var sentMessage = new CCSentMessage
            {
                Body                = msgBody,
                ToEmail             = eMail,
                Subject             = msgTemplate.Subject,
                CCMessageTemplateId = msgTemplate.Id,
                JobId               = job.Id,
                MessageType         = msgProfile.ProfileType.ToString(),
                MemberId            = req.MemberId
            };

            sentMessage.Save();


            // 7. Bitti
            job.State = JobStates.Done;
        }