コード例 #1
0
        public ActionResult Chat(string tel, string url, string @case, Boolean?isAjaxCall)
        {
            int  chatRoomId            = -1;
            int  userId                = -1;
            int  messageId             = -1;
            bool userIsAlreadyUsed     = false; //<-- indica si el usuario ya tiene un chatroom activo
            ChatRoomFromUrlModel model = new ChatRoomFromUrlModel();

            try
            {
                if (WebChat.Common.Common.Host_Referer != null)//<--pregunto si el parametro esta configurado
                {
                    if (HttpContext.Request.ServerVariables["HTTP_REFERER"] == null || !HttpContext.Request.ServerVariables["HTTP_REFERER"].Contains(WebChat.Common.Common.Host_Referer))
                    {
                        Helper.Log("Ruta de acceso incorrecta, HTTP_REFERER distinto de" + WebChat.Common.Common.Host_Referer); //Registro que se ingreso por un lugar que no correspondería
                        ChatRoomFromUrlModel mChatRoomFromUrlModel = new ChatRoomFromUrlModel();
                        mChatRoomFromUrlModel.HaveException = true;
                        return(View("Chat", mChatRoomFromUrlModel)); //abro el chat pero con excepcion, para detener todo.
                    }
                }

                ChatConfigBE chatConfigBE = ChatConfigDAC.GetByParam(null);
                if (chatConfigBE == null)
                {
                    model.IsConfigavailable = false; //<--No hay configuraciones, en el cliente se mostrara un mensaje
                    return(View("chat", model));
                }
                model.OperatrCount = EpironChatDAC.OnlineUsers_Count(chatConfigBE.ChatConfigGuid);
                if (model.OperatrCount > 0)
                {
                    EpironChatBC.CreateChatRoom_FromUrl(tel, url, @case, out chatRoomId, out userId, out messageId, out userIsAlreadyUsed);
                }
                else
                {
                    EpironChatBC.CreateChatRoom_NoOperators(tel, url, @case, string.Empty);
                }

                model.ChatConfigId      = chatConfigBE.ChatConfigGuid;
                model.UserId            = userId;
                model.RoomId            = chatRoomId;
                model.MessageId         = messageId;
                model.userAlreadySigned = userIsAlreadyUsed;
                model.IsConfigavailable = true;
                model.EmailAvailable    = chatConfigBE.EmailAvailable;
                //Survey
                model.SurveyAvailable      = chatConfigBE.ChatSurveyConfigId != null;
                model.ChatSurveyConfigText = chatConfigBE.ChatSurveyConfigText;
                model.ChatSurveyConfigURL  = chatConfigBE.ChatSurveyConfigURL;
                model.ChatSurveyConfigId   = chatConfigBE.ChatSurveyConfigId;

                // Busco las appSettings
                List <ApplicationSettingBE> wAppSettingsList = ApplicationSettingBC.SearchApplicationSetting();
                model.RetriveMessage_Timer    = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.RetriveMessage_Timer)).Value);
                model.GetRecord_Timer         = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.GetRecord_Timer)).Value);
                model.VersionWeb              = wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.VersionWeb)).Value;
                model.GetRecordIdTries        = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.GetRecordIdTries)).Value);
                model.ClientInactivityTimeOut = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.ClientInactivityTimeOut)).Value) / 1000;
                model.GetRecord_TimeOut       = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.GetRecord_TimeOut)).Value) / 1000;
                model.MaxLength_Message       = int.Parse(wAppSettingsList.Find(x => x.SettingId.Equals((int)Enumerations.ApplicationSettingId.MaxLength_Message)).Value);

                if (isAjaxCall.HasValue)
                {
                    return(Json(new { Result = "OK", userId = userId, roomId = chatRoomId, count = model.OperatrCount, messageId = model.MessageId }, JsonRequestBehavior.AllowGet));
                }


                return(View("chat", model));
            }
            catch (Exception ex)
            {
                Helper.Log(ex.Message);

                if (isAjaxCall.HasValue)
                {
                    return(Json(new { Result = "ERROR", Message = Fwk.Exceptions.ExceptionHelper.GetAllMessageException(ex) }));
                }
                else
                {
                    model.HaveException = true;
                    return(View("chat", model));
                }
            }
        }