public void AddChatRequest(ChatRequest request)
 {
     lock (lChatRequests)
     {
         lChatRequests.Add(request);
     }
 }
        public async Task<object> TinyInstancePush(ChatRequest.InstanceRequest request, SystemSession session)
        {
            var tinyInstancePush = new ChatInstancePullInfo { UserId = session.UserName, PageSize = request.PageSize, DrillUp = request.DrillUp, DrillDown = request.DrillDown, Limit = request.Limit, Cursor = request.Cursor, IncludeMsg = request.IncludeMessage, FolderId = request.FolderId };

            var response = await Task.Factory.StartNew(() => Client.ChatService.tinyInstancePush(tinyInstancePush, session.GetSession())).ConfigureAwait(false);

            return JsonConvert.DeserializeObject(response);
        }
        public async Task<object> TinyMessagePush(ChatRequest.MessageRequest request, SystemSession session)
        {
            // var result = new StatusData<object> { Status = SystemDbStatus.Selected };

            var tinyMessagePull = new ChatMessagePull { UserId = session.UserName, PageSize = request.PageSize, DrillUp = request.DrillUp, DrillDown = request.DrillDown, Limit = request.Limit, InstanceId = request.InstanceId, LastMsg = request.LastMessage, Cursor = request.Cursor, UnreadMsg = request.UnReadMessage };

            var response = await Task.Factory.StartNew(() => Client.ChatService.tinyMsgPush(tinyMessagePull, session.GetSession())).ConfigureAwait(false);
            // Helper.Helper.ExtractData(result, response, "error", elementsToBypass: new Collection<string> { "error" });
            return JsonConvert.DeserializeObject(response);
        }
 public void sendText(string s)
 {
     if (linesDictionary.ContainsKey (s)) {
         string l = linesDictionary [s];
         ChatRequest c = new ChatRequest (l);
         ch.sendRequest (c);
     } else {
         Debug.LogError ("Key does not exist");
     }
 }
 public void startQuest()
 {
     foreach (string s in sQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     started = true;
     finishValue = 0;
     complete = false;
     sendExtraLines ();
 }
 void completeQuest()
 {
     foreach (string s in fQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     npcb.finishQuest ();
     if (cqe != null) {
         cqe.complete ();
     }
     complete = true;
 }
 private void finishQuest()
 {
     foreach (string s in fQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     questFinished = true;
     oh.removeObjective (rewardParent);
     if (oh.isAnObjective (this.gameObject)) {
         oh.removeObjective (this.gameObject);
     }
 }
    void Update()
    {
        if (!doOnce && questComplete && wani.finished){
            foreach (string s in ftLines) {
                ChatRequest c = new ChatRequest(s);
                ch.sendRequest(c);
            }

            finish ();
            doOnce = true;
        }
    }
 public void startQuest()
 {
     foreach (string s in sQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     questStarted = true;
     objectContainer.GetComponent<DestructiblesHandler> ().canDestroy = true;
     if (!oh.isAnObjective (this.gameObject)) {
         oh.addObjective (this.gameObject);
     }
     oh.addObjective (transform.GetChild (0).gameObject);
 }
    public void startQuest()
    {
        foreach (string s in sQLines) {
            ChatRequest c = new ChatRequest(s);
            ch.sendRequest(c);
        }
        questStarted = true;
        if (!oh.isAnObjective (this.gameObject)) {
            oh.addObjective (this.gameObject);
        }
        oh.addObjective (rewardParent);

        startCheckChat = true;
    }
 private void failedQuest()
 {
     foreach (string s in fAQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     //npcb.toggleQuestIcon ();
     questStarted = false;
     questFinished = false;
     oh.removeObjective (rewardParent);
     if (oh.isAnObjective (this.gameObject)) {
         oh.removeObjective (this.gameObject);
     }
 }
        public async Task<StatusData<object>> InstancePull(ChatRequest.InstanceRequest request, SystemSession session)
        {
            var result = new StatusData<object> { Status = SystemDbStatus.Selected };

            if (request.FolderId == null)
                request.FolderId = "0";

            var instancePull = new ChatInstancePullInfo { UserId = session.UserName, PageSize = request.PageSize, DrillUp = request.DrillUp, DrillDown = request.DrillDown, Limit = request.Limit, Cursor = request.Cursor, IncludeMsg = request.IncludeMessage, FolderId = request.FolderId };

            var response = await Task.Factory.StartNew(() => Client.ChatService.instancePull(instancePull, session.GetSession())).ConfigureAwait(false);
            Helper.Helper.ExtractData(result, response, "error", elementsToBypass: new Collection<string> { "error" });

            return result;
        }
    void Update()
    {
        checkSoundIncrease ();

        if (startComic && l2sc.getFinished ()) {
            startSoundIncrease = true;
            comicUI.SetActive(false);
            volumeUI.SetActive(true);
            pc.toggleCanMove();
            startComic = false;
            exitTrigger.SetActive(true);
            foreach (string s in endLinesA){
                ChatRequest c = new ChatRequest(s);
                ch.sendRequest(c);
            }
        }
    }
 void Update()
 {
     if (!once && ca.getFinished ()) {
         if (toggleControlMenu){
             controlsPanel.SetActive(true);
         }
         if (showUI){
             vui.toggleAll();
         }
         if (!dc.destroyMode && turnOnDcAfterAni){
             dc.checkOverUI = true;
             dc.destroyMode = true;
         }
         foreach(string s in introLines){
             ChatRequest c = new ChatRequest(s);
             ch.sendRequest(c);
         }
         once = true;
     }
 }
示例#15
0
        public async Task TestFTErrorHandlerDelayedAnswerCallAndRetry()
        {
            ChatRequest request = new ChatRequest()
            {
                Channel  = "chatweb",
                Partner  = "AsurionLabs",
                Context  = "Test",
                TimeZone = "-0400" // EDT
            };

            var actual = await framework.HandleRequest(request);

            Assert.IsNotNull(actual, "Initial response is null");
            Assert.IsNull(actual.Status.Error, "API Error triggered. {0}", actual.Status.Error);
            Assert.IsNotNull(actual.ChatId, "Initial response did not give Chat Id");

            request.ChatId    = actual.ChatId;
            request.UserInput = "ft-ErrorHandler-DelayedAnswer-CallAndRetry";
            int step = 1;

            var expected = new ChatResponse
            {
                Steps = new ChatStepId[] {
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "1")
                },
                Messages = new string[]
                {
                    "Phone?"
                }
            };
            await framework.CheckRequest(request, expected, step ++);

            request.UserInput = "6505551212";
            expected          = new ChatResponse
            {
                Steps = new ChatStepId[] {
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "10000568")
                }
            };
            await framework.CheckRequest(request, expected, step ++);

            request.UserInput = "*****@*****.**";
            expected          = new ChatResponse
            {
                Steps = new ChatStepId[] {
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "10002611")
                }
            };
            await framework.CheckRequest(request, expected, step ++);

            request.UserInput = "6505551111";
            expected          = new ChatResponse
            {
                Steps = new ChatStepId[] {
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "10002254"),
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "10002611")
                }
            };
            await framework.CheckRequest(request, expected, step ++);

            request.UserInput = "1/1/2017";
            expected          = new ChatResponse
            {
                Steps = new ChatStepId[] {
                    new ChatStepId("ft-ErrorHandler-DelayedAnswer-CallAndRetry", "10000569"),
                    new ChatStepId("GetIntent-AsurionLabs-Test", "10000318")
                },
                Messages = new string[]
                {
                    "Phone: 6505551111\nEmail: [email protected]\nDate: 1/1/2017",
                    "What flow would you like to test?"
                }
            };
            await framework.CheckRequest(request, expected, step ++);
        }
示例#16
0
 private CommandTool()
 {
     Repository = new ChatAccountRepository();
     Client     = new ConnectorClient();
     Request    = new ChatRequest();
 }
示例#17
0
 public Task<StatusData<object>> Search(ChatRequest.SearchRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.Search(request, session);
 }
示例#18
0
 public Task<StatusData<Object>> InstancePull(ChatRequest.InstanceRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.InstancePull(request, session);
 }
示例#19
0
        public async Task <IActionResult> Message([FromBody] ChatRequest model)
        {
            if (model.content == "*추가하기*")
            {
                return(Json(new MessageResponse
                {
                    keyboard = Models.Response.Keyboard.TextKeyboard,
                    message = new Message
                    {
                        text = "내용을 적어주세요"
                    }
                }));
            }
            else if (model.content == "*목록 보기*")
            {
                var tasks = (await _taskService.GetTasksAsync()).ToArray();
                return(Json(new MessageResponse
                {
                    keyboard = new Keyboard
                    {
                        type = KeyboardType.Buttons,
                        buttons = tasks.Select(t => t.Title + "\n" + "[" + t.Id.ToString().ToLower() + "]").Concat(new [] { "*처음으로*" }).ToArray()
                    },
                    message = new Message
                    {
                        text = String.Join("\n", tasks.Select(t => String.Join("", t.Categories.Select(c => "[" + c.Category.FullName + "]")) + " " + t.Title).ToArray())
                    }
                }));
            }
            else if (model.content == "*처음으로*")
            {
                return(Json(new MessageResponse
                {
                    keyboard = DefaultKeyboard,
                    message = new Message
                    {
                        text = "명령을 눌러주세요"
                    }
                }));
            }
            else if (model.content == "*카테고리 보기*")
            {
                var categories = await _categoryService.GetCategoriesAsync();

                return(Json(new MessageResponse
                {
                    keyboard = new Keyboard
                    {
                        type = KeyboardType.Buttons,
                        buttons = categories.Select(c => $"{c.FullName}\n[c-{c.Id}]").Concat(new [] { "*처음으로*" }).ToArray()
                    },
                    message = new Message
                    {
                        text = String.Join("\n", categories.Select(c => $"[{c.FullName}] {c.Tasks.Count}개"))
                    }
                }));
            }
            else if (model.content.StartsWith("*완료처리*"))
            {
                var idPattern = @"\[(?<id>\w{8}-\w{4}-\w{4}-\w{4}-\w{12})\]";
                var idMatch   = Regex.Match(model.content, idPattern);

                if (idMatch.Success)
                {
                    var id = Guid.Parse(idMatch.Groups["id"].Value);

                    await _taskService.ToggleDoneAsync(id);

                    return(Json(new MessageResponse
                    {
                        keyboard = DefaultKeyboard,
                        message = new Message
                        {
                            text = "명령을 눌러주세요"
                        }
                    }));
                }
            }
            else if (model.content.StartsWith("*삭제하기*"))
            {
                var idPattern = @"\[(?<id>\w{8}-\w{4}-\w{4}-\w{4}-\w{12})\]";
                var idMatch   = Regex.Match(model.content, idPattern);

                if (idMatch.Success)
                {
                    var id = Guid.Parse(idMatch.Groups["id"].Value);

                    await _taskService.ArchiveAsync(id);

                    return(Json(new MessageResponse
                    {
                        keyboard = DefaultKeyboard,
                        message = new Message
                        {
                            text = "명령을 눌러주세요"
                        }
                    }));
                }
            }
            else
            {
                var idPattern    = @"\[(?<id>\w{8}-\w{4}-\w{4}-\w{4}-\w{12})\]";
                var catIdPattern = @"\[c-(?<id>\w{8}-\w{4}-\w{4}-\w{4}-\w{12})\]";

                var idMatch    = Regex.Match(model.content, idPattern);
                var catIdMatch = Regex.Match(model.content, catIdPattern);

                if (idMatch.Success)
                {
                    var id   = Guid.Parse(idMatch.Groups["id"].Value);
                    var task = await _taskService.FindTaskAsync(id);

                    return(Json(new MessageResponse
                    {
                        keyboard = new Keyboard
                        {
                            type = KeyboardType.Buttons,
                            buttons = new[]
                            {
                                $"*완료처리*\n[{id}]",
                                $"*삭제하기*\n[{id}]",
                                "*목록 보기*",
                                "*처음으로*"
                            }
                        },
                        message = new Message
                        {
                            text = $"{task.Title}\n" +
                                   (task.Deadline != null ? task.Deadline?.ToString("yy.MM.dd HH:mm") + "까지\n" : "") +
                                   (!String.IsNullOrWhiteSpace(task.Place) ? $"{task.Place}에서" : "")
                        }
                    }));
                }
                else if (catIdMatch.Success)
                {
                    var id       = Guid.Parse(catIdMatch.Groups["id"].Value);
                    var category = await _categoryService.FindCategoryAsync(id);

                    var tasks = category.Tasks.Select(t => t.Task);

                    return(Json(new MessageResponse
                    {
                        keyboard = new Keyboard
                        {
                            type = KeyboardType.Buttons,
                            buttons = tasks.Select(t => t.Title + "\n" + "[" + t.Id.ToString().ToLower() + "]").Concat(new[] { "*처음으로*" }).ToArray()
                        },
                        message = new Message
                        {
                            text = String.Join("\n", tasks.Select(t => String.Join("", t.Categories.Select(c => "[" + c.Category.FullName + "]")) + " " + t.Title).ToArray())
                        }
                    }));
                }

                if (!model.content.StartsWith("*"))
                {
                    await _taskService.CreateTaskAsync(model.content, null);

                    return(Json(new MessageResponse
                    {
                        keyboard = DefaultKeyboard,
                        message = new Message {
                            text = "추가되었습니다"
                        }
                    }));
                }
            }

            return(Json(new MessageResponse
            {
                keyboard = DefaultKeyboard,
                message = new Message
                {
                    text = "명령을 눌러주세요"
                }
            }));
        }
示例#20
0
 public Task<object> GetMessage(ChatRequest.MessageInformationRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.GetMessage(request, session);
 }
        private bool Chat(ChatRequest profile, Filter filter)
        {
            TouchAt(Screen.ChatScreenTextField);
            Delay(300);

            var messages = ZaloHelper.GetZalomessages(profile.Profile, filter);

            foreach (var message in messages)
            {
                DeleteWordInFocusedTextField(20);

                if (message.Type == ZaloMessageType.Text)
                {
                    SendText(message.Value);
                    Delay(500);

                    if (!IsDebug)
                    {
                        //TouchAt(Screen.ChatScreenSendButton);
                        SendKey(KeyCode.AkeycodeEnter);
                    }

                    ZaloHelper.Output($"Gửi tin nhắn chữ '{message.Value}' tới bạn '{profile.Profile.Name}' thành công");
                }
                else
                {
                    UpImageChat(new System.IO.FileInfo(message.Value));

                    Delay(500);
                    TouchAt(Screen.ChatScreenOpenMoreWindowButton);

                    Delay(500);
                    TouchAt(Screen.ChatScreenAddImageButton);

                    Delay(500);
                    TouchAt(Screen.UploadAlbumDCimFolter);

                    Delay(500);
                    TouchAt(Screen.UploadAlbumFirstImageCheckBox);

                    if (!Settings.IsDebug)
                    {
                        Delay(500);
                        TouchAt(Screen.UploadAlbumSendButton);
                    }
                    else
                    {
                        Delay(500);
                        TouchAtIconTopLeft();

                        Delay(500);
                        TouchAtIconTopLeft();
                    }
                    ZaloHelper.Output($"Gửi tin nhắn hình '{message.Value}' tới bạn '{profile.Profile.Name}' thành công");

                    Delay(900);
                    TouchAt(Screen.ChatScreenCloseMoreWindowButton);

                    Delay(100);
                }

                Delay(1000);

                switch (profile.Objective)
                {
                case ChatObjective.FriendInContactList:
                    DbContext.AddLogMessageSentToFriend(profile.Profile, Settings.User.Username, message.Value);

                    break;

                case ChatObjective.StrangerByPhone:
                case ChatObjective.StrangerNearBy:
                    DbContext.AddLogMessageSentToStranger(profile.Profile, Settings.User.Username, message.Value);

                    break;
                }
            }

            return(true);
        }
示例#22
0
        public void start()
        {
            //begin decoding
            try
            {
                string clientmessage = null;

                bool rcount = false;

                //Logger.getLogger().log(Logger.DEBUG_PRIORITY, "Check for client stats and socket info: " + this._handler._client._status +
                //	" and " + this._clientsock.Connected);

                #region Decoding and Action Loop
                while (this._clientsock.Connected && (this._handler._client._status == RuntimeConstants.PENDING || this._handler._client._status == RuntimeConstants.CONNECTED))
                {
                    //	Logger.getLogger().log(Logger.DEBUG_PRIORITY, "Here is the status of our connection: " + this._clientsock.Connected);

                    clientmessage = null;
                    rcount        = this._xsp.getXMLMessage(ref clientmessage);
                    //rcount = this._clientsock.Receive(recs,recs.Length,0);

                    if (rcount)
                    {
                        try
                        {
                            //clientmessage = System.Text.Encoding.ASCII.GetString(recs) ;
                            //clientmessage = clientmessage.Substring(0,rcount);


                            Logger.getLogger().log(Logger.DEBUG_PRIORITY, "Here is what they said: " + clientmessage + " and length : " + rcount);

                            this._xmlReader = new XmlTextReader(new StringReader(clientmessage));
                            this._xmlReader.ReadStartElement();
                            this._xmlReader.ReadStartElement();
                            Logger.getLogger().log(Logger.DEBUG_PRIORITY, "next node: " + this._xmlReader.Name);

                            /*
                             *
                             * Logger.getLogger().log(Logger.DEBUG_PRIORITY, "loaded xml reader: " + this._xmlReader.Name);
                             *
                             * Logger.getLogger().log(Logger.DEBUG_PRIORITY, "next node: " + this._xmlReader.Name);
                             */
                            //this._xmlReader.Name

                            //the current xmlReader.Name is the message name we care about so now we do our if else statements

                            //the client is requesting a connect here
                            if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CONNECT)
                            {
                                //first we check if the client is in the pending connect state
                                //if not pending then this request should not be honored
                                if (!this._handler._client._status.Equals(RuntimeConstants.PENDING))
                                {
                                    Logger.getLogger().log(Logger.INFO_PRIORITY, "Client - " +
                                                           this._handler._client.getChatName() + "@" +
                                                           this._handler._client.getIP() +
                                                           " send connect request with client status set to: " +
                                                           this._handler._client._status);
                                }
                                //we handle all the connect stuff
                                else
                                {
                                    //we need to pull all the info off the message
                                    //ip address
                                    this._xmlReader.ReadStartElement();
                                    this._handler._client.setIP(this._xmlReader.ReadElementString());
                                    this._handler._client.setChatName(this._xmlReader.ReadElementString());

                                    //now we need to assign the client a unique ID, add client to the hashtable
                                    //of connected clients and return a connection element.

                                    this._handler._client.setID(this._handler._server.getClientID());
                                    this._handler._client._status = RuntimeConstants.CONNECTED;
                                    this._handler._server.addClient(this._handler);

                                    Logger.getLogger().log(Logger.DEBUG_PRIORITY, this._handler._client.ToString());
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(this._handler._responseHandler.connectConfirm));
                                }
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CONFIRM_CONNECT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_DISCONNECT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CHAT_INVITE)
                            {
                                //the client wants to chat with someone
                                if (this._handler._client._status.Equals(RuntimeConstants.PENDING))
                                {
                                    Logger.getLogger().log(Logger.INFO_PRIORITY, "Client must send connection first.");
                                    // SHOULD SEND ERROR MESSAGE BACK TO CLIENT
                                }
                                else
                                {
                                    string ip;
                                    string chatName;
                                    string status;
                                    string id;

                                    //no we go ahead and parse and make the request
                                    this._xmlReader.ReadStartElement();
                                    this._xmlReader.ReadStartElement();
                                    ip       = this._xmlReader.ReadElementString();
                                    chatName = this._xmlReader.ReadElementString();
                                    status   = this._xmlReader.ReadElementString();
                                    id       = this._xmlReader.ReadElementString();

                                    ChatBuddy   cb = new ChatBuddy(ip, chatName, status, id);
                                    ChatRequest cr = new ChatRequest(this._handler, this._handler._server.lookupClient(cb), this._handler._server.getChatID());
                                    //now that we have the buddy they want to chat with let's make the right call
                                    ThreadPool.QueueUserWorkItem(new WaitCallback(this._handler._server._chatRequestHandler.chatRequest), cr);
                                }
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CONFIRM_CHAT_INVITE)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_REQUEST_CHAT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_ACCEPT_CHAT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_DECLINE_CHAT)
                            {
                                //decline chat we now need to tell the sorry sucker who wanted to
                                //chat with this buddy and remove the ChatRequest from the pending chat requests
                                //hashtable in the ChatRequestHandler
                                //we let the ChatRequestHandler take care of all of this
                                string chatID;
                                //decode the chatID
                                //this._xmlReader.ReadStartElement();
                                chatID = this._xmlReader.ReadElementString();


                                ThreadPool.QueueUserWorkItem(new WaitCallback(this._handler._server._chatRequestHandler.chatRequestReject), chatID);
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_EXIT_CHAT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CHAT_UPDATE)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CLOSE_CHAT)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_CHATTER)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_DATA)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_DECODED_CHATTER)
                            {
                            }
                            else if (this._xmlReader.Name == RuntimeConstants.XML_MESSAGE_ERROR)
                            {
                            }
                            //xml message is not recognized
                            else
                            {
                            }
                        }
                        catch (System.Xml.XmlException xmlE)
                        {
                            Logger.getLogger().log(Logger.EXCEPTION_PRIORITY, "Could not parse last message", xmlE);
                            //send out error xml here
                        }
                    }
                    else
                    {
                        break;
                    }
                }                //while
                #endregion
            }
            catch (System.Exception eee)
            {
                Logger.getLogger().log(Logger.EXCEPTION_PRIORITY, "Unexpected exception: " + eee.Message, eee);
            }
            finally
            {
                this.cleanup();
            }
        }
        public void SendMessageToFriendInContactList(Filter filter)
        {
            try
            {
                var countSuccess = 0;

                GotoPage(Activity.MainTab);

                Delay(1000);

                TouchAt(Screen.HomeScreenFriendTab);

                if (!string.IsNullOrWhiteSpace(filter.IncludedPeopleNames))
                {
                    SendMessageToFriendWithNames(filter);

                    return;
                }

                Delay(1000);
                ZaloHelper.Output("Đang phân tích dữ liệu");

                var fileCapture = CaptureScreenNow();
                var friends     = ZaloImageProcessing.GetFriendProfileList(fileCapture, Screen);

                ZaloHelper.OutputLine();
                friends.ToList().ForEach(x => ZaloHelper.Output(x.Name));
                ZaloHelper.OutputLine();

                var stack         = new Stack <FriendPositionMessage>(friends.Where(x => !string.IsNullOrWhiteSpace(x.Name)).OrderByDescending(x => x.Point.Y));
                var profilesPage1 = stack.Select(x => x.Name).ToArray();

                while (countSuccess <= filter.NumberOfAction)
                {
                    while (stack.Count == 0)
                    {
                        ScrollList(9);

                        ZaloHelper.Output("Đang phân tích dữ liệu màn hình");
                        fileCapture = CaptureScreenNow();
                        friends     = ZaloImageProcessing.GetFriendProfileList(fileCapture, Screen);

                        ZaloHelper.OutputLine();
                        friends.ToList().ForEach(x => ZaloHelper.Output(x.Name));
                        ZaloHelper.OutputLine();

                        stack = new Stack <FriendPositionMessage>(friends.OrderByDescending(x => x.Point.Y));
                        var profilesPage2 = stack.Select(x => x.Name).ToArray();
                        if (!profilesPage2.Except(profilesPage1).Any())
                        {
                            ZaloHelper.Output("Hết danh sách");
                            return;
                        }

                        profilesPage1 = profilesPage2;
                    }

                    Delay(2000);

                    var rowFriend = stack.Pop();

                    if (DbContext.LogMessageSentToFriendSet.FirstOrDefault(x => x.Name == rowFriend.Name && x.Account == Settings.User.Username) != null)
                    {
                        ZaloHelper.Output($"Đã gửi tin cho bạn {rowFriend.Name} rồi");

                        continue;
                    }

                    var profile = DbContext.ProfileSet.FirstOrDefault(x => x.Name == rowFriend.Name);
                    var request = new ChatRequest
                    {
                        Profile = new ProfileMessage
                        {
                            Name        = rowFriend.Name,
                            Location    = profile?.Location,
                            PhoneNumber = profile?.PhoneNumber
                        },
                        Objective = ChatObjective.FriendInContactList
                    };

                    if (Screen.InfoRect.Contains(rowFriend.Point))
                    {
                        TouchAt(rowFriend.Point);
                        Delay(2000);

                        NavigateToProfileScreenFromChatScreenToGetInfoThenGoBack(request);

                        string reason;
                        if (!filter.IsValidProfile(request.Profile, out reason))
                        {
                            ZaloHelper.Output("Bỏ qua bạn này, lý do: " + reason);
                            TouchAtIconTopLeft(); //Touch to close side bar
                            Delay(400);
                        }
                        else
                        {
                            if (Chat(request, filter))
                            {
                                countSuccess++;
                                if (profile == null)
                                {
                                    DbContext.AddProfile(request.Profile, Settings.User.Username);
                                }
                            }

                            TouchAtIconTopLeft();//GO BACK PROFILE
                        }
                    }
                }
            }
            catch (Exception ex) { _log.Error(ex); }
            finally
            {
                ZaloHelper.SendCompletedTaskSignal();
            }
        }
        private void ChatFriendNearBy(int maxFriendToday, Filter filter)
        {
            ZaloHelper.Output($"!bắt đầu gửi tin cho bạn gần đây. Số bạn yêu cầu tối đa trong ngày hôm nay là {maxFriendToday}");
            var countSuccess = 0;

            string[] profilesPage1 = null;
            string[] profilesPage2 = null;
            ZaloHelper.Output("!đang tìm thông tin các bạn");
            var friendNotAdded = (GetPositionAccountNotSent(x => profilesPage1 = x)).OrderByDescending(x => x.Point.Y);
            var points         = new Stack <FriendPositionMessage>(friendNotAdded);

            profilesPage1.ToList().ForEach(x => ZaloHelper.Output($"!tìm thấy bạn trên màn hình: {x}"));
            ZaloHelper.Output("!--------------------");
            friendNotAdded.ToList().ForEach(x => ZaloHelper.Output($"!các bạn chưa được gửi lời mời: {x.Name}"));
            while (countSuccess < maxFriendToday)
            {
                while (points.Count == 0)
                {
                    ZaloHelper.Output("!đang cuộn danh sách bạn");
                    ScrollList(9);

                    ZaloHelper.Output("!đang tìm thông tin các bạn");

                    friendNotAdded = GetPositionAccountNotSent(x => profilesPage2 = x).OrderByDescending(x => x.Point.Y);
                    points         = new Stack <FriendPositionMessage>(friendNotAdded);
                    profilesPage2.ToList().ForEach(x => ZaloHelper.Output($"!tìm thấy bạn trên màn hình: {x}"));

                    ZaloHelper.OutputLine();
                    friendNotAdded.ToList().ForEach(x => ZaloHelper.Output($"!bạn chưa được gửi tin nhắn: {x}"));
                    ZaloHelper.OutputLine();

                    if (!profilesPage2.Except(profilesPage1).Any())
                    {
                        ZaloHelper.Output("!hết bạn trong danh sách.");

                        return;
                    }

                    profilesPage1 = profilesPage2;
                }

                Delay(2000);

                var pointRowFriend = points.Pop();

                var request = new ChatRequest
                {
                    Profile = new ProfileMessage
                    {
                        Name     = pointRowFriend.Name,
                        Location = filter.Locations
                    },
                    Objective = ChatObjective.StrangerNearBy
                };

                if (Screen.InfoRect.Contains(pointRowFriend.Point))
                {
                    TouchAt(pointRowFriend.Point);
                    Delay(2000);//wait to navigate chat screen

                    var infoGrab = GrabProfileInfo(pointRowFriend.Name);
                    var profile  = request.Profile;
                    ZaloHelper.CopyProfile(ref profile, infoGrab);

                    string reason;
                    if (!filter.IsValidProfile(request.Profile, out reason))
                    {
                        ZaloHelper.Output("Bỏ qua bạn này, lý do: " + reason);
                        TouchAt(Screen.IconTopLeft);
                        Delay(300);
                    }
                    else
                    {
                        TouchAt(Screen.IconBottomLeft);
                        Delay(800);

                        if (Chat(request, filter))
                        {
                            DbContext.AddProfile(request.Profile, Settings.User.Username);
                            countSuccess++;
                            ZaloHelper.Output($"!gửi tin nhắn tới: {request.Profile.Name} thành công. Số bạn đã gửi thành công trong phiên này là: {countSuccess}");

                            TouchAtIconTopLeft(); //Go Back TO PROFILE

                            TouchAtIconTopLeft(); // GO BACK TO FRIENDLIST
                        }
                    }
                }
            }
        }
        public void SendMessageByPhoneNumber(Filter filter)
        {
            try
            {
                var canSentToday   = Settings.MaxMessageStrangerPerDay - DbContext.GetMessageToStragerCount(Settings.User.Username);
                var numberOfAction = filter.NumberOfAction > canSentToday ? canSentToday : filter.NumberOfAction;
                if (numberOfAction <= 0)
                {
                    ZaloHelper.Output("đã gửi hết số bạn trong ngày rồi");

                    return;
                }

                var phonelist = filter.IncludePhoneNumbers.Split(";,|".ToArray()).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();

                var countSuccess = 0;
                var stack        = new Stack <string>(phonelist);

                while (countSuccess < numberOfAction)
                {
                    GotoPage(Activity.FindFriendByPhoneNumber);
                    var success = false;

                    while (!success)
                    {
                        if (stack.Count == 0)
                        {
                            return;
                        }
                        var phoneNumber = stack.Pop();
                        ZaloHelper.Output($"Tiến hành gửi tin qua số đt {phoneNumber}");
                        if (DbContext.LogMessageSentToStrangerSet.FirstOrDefault(x => x.PhoneNumber == phoneNumber && x.Account == Settings.User.Username) != null)
                        {
                            ZaloHelper.Output($"Đã gửi tin cho số đt '{phoneNumber}' rồi");

                            continue;
                        }

                        Thread.Sleep(100);

                        DeleteWordInFocusedTextField();
                        SendText(phoneNumber);

                        SendKey(KeyCode.AkeycodeEnter);
                        Thread.Sleep(4000);

                        ZaloHelper.Output("!đang kiểm tra số điện thoại khả dụng");
                        if (ZaloImageProcessing.HasFindButton(CaptureScreenNow(), Screen))
                        {
                            ZaloHelper.Output("!Lỗi, số đt không có");
                        }
                        else
                        {
                            var profile = GrabProfileInfo();
                            profile.PhoneNumber = phoneNumber;

                            string reason;
                            if (!filter.IsValidProfile(profile, out reason))
                            {
                                ZaloHelper.Output("Bỏ qua bạn này, lý do: " + reason);

                                TouchAtIconTopLeft(); //Go back to phone Entry
                                Delay(400);
                            }
                            else
                            {
                                var request = new ChatRequest {
                                    Profile = profile, Objective = ChatObjective.StrangerByPhone
                                };

                                TouchAt(Screen.IconBottomLeft);
                                Delay(800);

                                if (Chat(request, filter))
                                {
                                    countSuccess++;
                                    DbContext.AddProfile(request.Profile, Settings.User.Username);

                                    success = true;
                                }

                                TouchAtIconTopLeft();//GO BACK FRIENDLIST
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex);
            }
            finally
            {
                ZaloHelper.SendCompletedTaskSignal();
            }
        }
示例#26
0
        void ProcessVisitorMessages()
        {
            try
            {
                if (_processingVisitorMessages)
                {
                    return;
                }
                _processingVisitorMessages = true;
                var useCallback             = ChatController.UseCallbackForVMs();
                var useWorkgroupFromProfile = ChatController.UseProfileWorkgroupForVMs();
                var vmWorkgroup             = ChatController.GetDefaultWorkgroupForVisitorMessages();
                var repository      = new Repository();
                var targetWorkgroup = repository.Workgroups.FirstOrDefault(w => w.DisplayName.ToLower() == vmWorkgroup);
                if (repository.VisitorMessages.Any(v => !v.IsProcessed) && (targetWorkgroup != null || useWorkgroupFromProfile))
                {
                    //LoggingService.GetInstance().LogToFile("Visitor Messages Found", ChatServices.FolderNameSafeDate(), true);
                    var visitorMessages = repository.VisitorMessages.Where(v => !v.IsProcessed).ToList();
                    var chatAttributes  = new Dictionary <string, string>();
                    var chatSkills      = new Collection <RoutingContext>();

                    foreach (var visitorMessage in visitorMessages)
                    {
                        if (!useCallback)
                        {
                            if (!ChatServices.VisitorMessageChats.Any(i => i.VisitorMessageId == visitorMessage.VisitorMessageId))
                            {
                                var chatRequest = new ChatRequest
                                {
                                    SupportedContentTypes = "text/plain",
                                    Participant           = new Participant
                                    {
                                        Name        = "visitormessage",
                                        Credentials = ""
                                    },
                                    TranscriptRequired = false,
                                    EmailAddress       = "*****@*****.**",
                                    Target             = useWorkgroupFromProfile ? visitorMessage.Workgroup : targetWorkgroup.DisplayName,
                                    TargetType         = "Workgroup",
                                    Language           = "en-us",
                                    CustomInfo         = "",
                                    Attributes         = chatAttributes,
                                    RoutingContexts    = chatSkills
                                };
                                var chatResponse = ChatServices.StartChat(chatRequest);
                                if (chatResponse != null && chatResponse.Status.Type == "success")
                                {
                                    var vm = new VisitorMessageChat
                                    {
                                        VisitorMessageId = visitorMessage.VisitorMessageId,
                                        Message          = visitorMessage.Message,
                                        ParticipantId    = chatResponse.ParticipantID,
                                        State            = VisitorMessageState.Connected
                                    };
                                    ChatServices.VisitorMessageChats.Add(vm);
                                }
                            }
                        }
                        else
                        {
                            var callbackAttributes = new Dictionary <string, string>();
                            if (!String.IsNullOrWhiteSpace(visitorMessage.AttributeNames))
                            {
                                var attrNames  = visitorMessage.AttributeNames.Split('|');
                                var attrValues = visitorMessage.AttributeValues.Split('|');
                                if (attrNames.Length == attrValues.Length)
                                {
                                    for (int i = 0; i < attrNames.Length; i++)
                                    {
                                        var name = attrNames[i];
                                        var val  = attrValues[i];
                                        callbackAttributes.Add(name, val);
                                    }
                                }
                            }

                            var callbackSkills = new Collection <CallbackRoutingContext>();
                            if (!String.IsNullOrWhiteSpace(visitorMessage.Skills))
                            {
                                var skills = visitorMessage.Skills.Split(',');
                                foreach (var skill in skills)
                                {
                                    callbackSkills.Add(new CallbackRoutingContext
                                    {
                                        Category = "Product",
                                        Context  = skill
                                    });
                                }
                            }

                            var subject = visitorMessage.Message.Length > 2000 ? visitorMessage.Message.Substring(0, 1999) : visitorMessage.Message;

                            var callbackRequest = new CallbackRequest()
                            {
                                Participant = new CallbackParticipant
                                {
                                    Name        = "visitormessage",
                                    Credentials = "",
                                    Telephone   = visitorMessage.PhoneNumber
                                },
                                Target          = useWorkgroupFromProfile ? visitorMessage.Workgroup : targetWorkgroup.DisplayName,
                                TargetType      = "Workgroup",
                                Language        = "en-us",
                                CustomInfo      = visitorMessage.CustomInfo,
                                Subject         = subject,
                                Attributes      = callbackAttributes,
                                RoutingContexts = callbackSkills
                            };
                            var callbackResponse = ChatServices.CreateCallback(callbackRequest);
                            if (callbackResponse != null && callbackResponse.Status.Type == "success")
                            {
                                visitorMessage.IsProcessed = true;
                                visitorMessage.Type        = VisitorMessageType.Callback;
                                repository.SaveChanges();
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                LoggingService.GetInstance().LogException(e);
            }
            _processingVisitorMessages = false;
        }
        public JoinChatRoomResult JoinChatRoom(string chatRoomId, string href)
        {
            if (href != null)
            {
                HttpContext.Current.Items["href"] = href;
            }

            var result = new JoinChatRoomResult
            {
                FileTransferEnabled = chatSettingsProvider.EnableFileTransfer,
                VideoChatEnabled    = chatSettingsProvider.EnableVideoChat,
                FlashMediaServer    = chatSettingsProvider.FlashMediaServer
            };

            User user;

            try
            {
                user = chatUserProvider.GetCurrentlyLoggedUser();
            }
            catch (System.Security.SecurityException err)
            {
                result.Error = err.Message;
                return(result);
            }

            if (user == null)
            {
                string loginUrl = chatUserProvider.GetLoginUrl(href);
                result.Error = "You need to login in order to use the chat!";
                if (loginUrl != null)
                {
                    result.Error      += " Redirecting to login page...";
                    result.RedirectUrl = loginUrl;
                }
                return(result);
            }

            Room room = chatRoomProvider.GetChatRoom(chatRoomId);

            if (room == null)
            {
                result.Error = "The specified chat room does not exist!";
                return(result);
            }

            #region Messenger
            var  url              = (new Uri(href));
            var  queryKeyValues   = HttpUtility.ParseQueryString(url.Query);
            var  isInitiator      = queryKeyValues["init"];
            var  targetUserId     = queryKeyValues["target"];
            bool alreadyConnected = href.IndexOf('#') == -1 ? false : (href.Substring(href.IndexOf('#')) == "#connected");
            #endregion

            string reason;

            //if messenger
            if (room.Id == "-2")
            {
                //check chat access only for the initiators
                if (isInitiator == "1" && !chatRoomProvider.HasChatAccess(user.Id, room.Id, out reason))
                {
                    if (String.IsNullOrEmpty(reason))
                    {
                        result.Error = "You don't have access to the messenger.";
                    }
                    else
                    {
                        result.Error = reason;
                    }

                    return(result);
                }
            }
            else
            {
                if (!chatRoomProvider.HasChatAccess(user.Id, room.Id, out reason))
                {
                    if (String.IsNullOrEmpty(reason))
                    {
                        result.Error = String.Format("You don't have access to chat room '{0}'.", room.Name);
                    }
                    else
                    {
                        result.Error = reason;
                    }

                    return(result);
                }
            }

            // Ignore max users limit for messengerRoom (roomId = -2)
            if (room.Id != "-2" && chatRoomStorage.GetUsersInRoom(room.Id).Length >= room.MaxUsers)
            {
                result.Error = String.Format("The chat room '{0}' is full. Please try again later.", room.Name);

                return(result);
            }

            chatRoomStorage.AddUserToRoom(room.Id, user.Id);
            chatRoomStorage.AddMessage(room.Id, new Message
            {
                Content =
                    string.Format("User {0} has joined the chat.",
                                  user.DisplayName),
                FromUserId  = user.Id,
                ToUserId    = String.IsNullOrEmpty(targetUserId) ? null : targetUserId,
                MessageType = MessageTypeEnum.UserJoined,
                Timestamp   = Miscellaneous.GetTimestamp()
            });

            #region Messenger

            //delete all messages when starting messenger (not reloading it)
            if (isInitiator != null && !alreadyConnected)
            {
                chatRoomStorage.DeleteAllMessagesFor(room.Id, user.Id);
            }

            if (!alreadyConnected && isInitiator == "1" && !String.IsNullOrWhiteSpace(targetUserId))
            {
                try
                {
                    var targetUser = chatUserProvider.GetUser(targetUserId);

                    //Not sure that MessengerUrl should be constructed here?! timestamp and hash are tied to
                    //the implementation
                    var timestamp = DateTime.Now.ToFileTimeUtc();
                    var hash      = Miscellaneous.CalculateChatAuthHash(targetUserId, user.Id, timestamp.ToString());

                    var request = new ChatRequest
                    {
                        FromThumbnailUrl = user.ThumbnailUrl,
                        FromProfileUrl   = user.ProfileUrl,
                        FromUserId       = user.Id,
                        FromUsername     = user.DisplayName,
                        ToUserId         = targetUserId,
                        ToUsername       = targetUser.DisplayName,
                        MessengerUrl     =
                            String.Format("{0}?init=0&id={1}&target={2}&timestamp={3}&hash={4}",
                                          url.GetLeftPart(UriPartial.Path), targetUserId, user.Id,
                                          timestamp, hash)
                    };

                    messengerProvider.AddChatRequest(request);
                }
                catch (System.Security.SecurityException) { }
            }
            #endregion

            result.ChatRoomName  = room.Name;
            result.ChatRoomTopic = room.Topic;
            result.Users         = chatRoomStorage.GetUsersInRoom(room.Id).Select(chatUserProvider.GetUser).ToArray();
            result.Token         = chatRoomStorage.GenerateUserToken(user.Id);
            result.UserId        = user.Id;
            result.IsAdmin       = chatUserProvider.IsChatAdmin(user.Id, room.Id);

            StopVideoBroadcast(user.Id, room.Id);
            result.Broadcasts = chatRoomStorage.GetBroadcasts(room.Id, user.Id);

            return(result);
        }
示例#28
0
 public void TransferChat(ChatRequest chatRequest)
 {
     ChatService.RequestChat(chatRequest);
 }
示例#29
0
 public Task<StatusData<string>> RemoveUser(ChatRequest.MemberRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.RemoveUser(request, session);
 }
示例#30
0
    private void DisplayMessage(ChatRequest request)
    {
        GameObject danmaku = Instantiate(danmakuPrefab, transform);

        danmaku.GetComponent <ChatDanmaku>().Init($"{request.playerName}: {request.message}");
    }
示例#31
0
 public Task<StatusData<List<string>>> MoveToInbox(ChatRequest.MoveToInboxRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.MoveToInbox(request, session);
 }
示例#32
0
        public void HandleMessage(string incommingMessage, TalkBackDBContext dbContext)
        {
            MappedType t           = MappedType.UNDEFINED;
            XDocument  serialized  = XDocument.Parse(incommingMessage);
            XElement   typeElement = serialized.Root.Element("Type");

            if (typeElement == null)
            {
                // ignore
                return;
            }
            string type = typeElement.Value;

            if (ModelXmlMapper.map.TryGetValue(type, out t))
            {
                switch (t)
                {
                case MappedType.MESSAGE:
                    MessageModel msg = new MessageModel();
                    if (msg.FromXml(serialized.Root))
                    {
                        HandleChatMessageMsg(msg, dbContext);
                    }
                    break;

                case MappedType.USER:
                    UserModel user = new UserModel();
                    user.FromXml(serialized.Root);
                    break;

                case MappedType.CONTACT:
                    Contact contact = new Contact();
                    contact.FromXml(serialized.Root);
                    break;

                case MappedType.CHAT_REQUEST:
                    ChatRequest req = new ChatRequest();
                    if (req.FromXml(serialized.Root))
                    {
                        HandleChatRequestMsg(req, dbContext);
                    }
                    break;

                case MappedType.CHAT_REQUEST_RESPONSE:
                    ChatRequestResponse resp = new ChatRequestResponse();
                    if (resp.FromXml(serialized.Root))
                    {
                        HandleChatResponseMsg(resp, dbContext);
                    }
                    break;

                case MappedType.LOGIN:
                    Login login = new Login();
                    if (login.FromXml(serialized.Root))
                    {
                        HandleLoginMsg(login, dbContext);
                    }
                    break;

                case MappedType.LOGIN_RESPONSE:
                    LoginResponse loginResp = new LoginResponse();
                    loginResp.FromXml(serialized.Root);
                    break;

                case MappedType.UNDEFINED:
                    throw new Exception("Don't know how to parse this type");
                }
            }
        }
 public async Task <ChatResponse> HandleRequest(ChatRequest request)
 {
     return(await chatEngine.HandleRequest(request));
 }
示例#34
0
 public Task<StatusData<string>> ChatMemberAddRemove(ChatRequest.BlockUsersRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.ChatMemberAddRemove(request, session);
 }
示例#35
0
        private async Task <Nullable <KeyValuePair <string, IServerStreamWriter <ChatRequest> > > > SendMessageToSubscriber(KeyValuePair <string, IServerStreamWriter <ChatRequest> > user, ChatRequest message)
        {
            try
            {
                await user.Value.WriteAsync(message);

                return(null);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(user);
            }
        }
示例#36
0
 public Task<StatusData<object>> MessagePull(ChatRequest.MessageRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.MessagePull(request, session);
 }
 void sendExtraLines()
 {
     if (hasExtraLines) {
         ChatRequest c = new ChatRequest(trigger.getExtraLines());
         ch.sendRequest(c);
     }
 }
示例#38
0
 public Task<StatusData<string>> UpdateDisposableInstance(ChatRequest.DisposableInstanceRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.UpdateDisposableInstance(request, session);
 }
示例#39
0
 public Task<StatusData<string>> InstanceOperation(ChatRequest.InstanceOperationRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.InstanceOperation(request, session);
 }
示例#40
0
 public Task<List<string>> MessageDelete(ChatRequest.MessageDeleteRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.MessageDelete(request, session);
 }
示例#41
0
 public Task<StatusData<string>> GroupAdd(ChatRequest.ChatGroupRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.GroupAdd(request, session);
 }
示例#42
0
 public Task<object> TinyInstancePush(ChatRequest.InstanceRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.TinyInstancePush(request, session);
 }
示例#43
0
 public static chat.model.User getUser(ChatRequest request)
 {
     chat.model.User user = new chat.model.User(request.User.Id);
     user.Password = request.User.Passwd;
     return(user);
 }
示例#44
0
 public Task<StatusData<string>> BlockUsers(ChatRequest.BlockUsersRequest request, SystemSession session)
 {
     return _jUnitOfWork.Chat.BlockUsers(request, session);
 }
示例#45
0
 public async Task BroadcastMessageAsync(ChatRequest message) => await BroadcastMessages(message);
示例#46
0
        public async Task <ActionResult <ChatResponse> > Post([FromServices] ChatWeb.Services.ChatEngine chatEngine, [FromBody] ChatRequest chatRequest, string partner = null)
        {
            // NOTE: We are requiring the partner in the URL so an ALB can easily parse the partner for proper routing through proxies.
            if (chatRequest == null)
            {
                logger.Debug("Chat request is null");
                return(BadRequest());
            }

            if (chatRequest.ClientData == null)
            {
                chatRequest.ClientData = new ChatClientData();
            }

            chatRequest.ClientData.ClientIp  = NetworkHelpers.GetClientIP(HttpContext);
            chatRequest.ClientData.UserAgent = HttpContext.Request.Headers["User-Agent"];

            // Ignore debug data if not allowed
            if (!chatConfiguration.AllowDebugMode)
            {
                chatRequest.DebugData = null;
            }

            bool trustedClient = (!String.IsNullOrEmpty(chatConfiguration.TrustedClientKey) && (HttpContext.Request.Headers["x-api-key"] == chatConfiguration.TrustedClientKey));

            if ((chatRequest.TrustedClientData != null) && !trustedClient)
            {
                logger.WarnFormat("TrustedClientData was present but stripped since the API key did not match.");
                chatRequest.TrustedClientData = null;
            }

            log4net.LogicalThreadContext.Properties["interactionId"] = Guid.NewGuid().ToString();
            log4net.LogicalThreadContext.Properties["clientIp"]      = chatRequest.ClientData.ClientIp;

            if (String.IsNullOrEmpty(partner) || partner != chatRequest.Partner)
            {
                logger.Warn("Request does not contain the partner in URL parameter");
                //return BadRequest("partner is required in URL");
            }

            try
            {
                ChatResponse response = null;

                // Make initial call to get chat Id if missing and userinput was sent
                if (String.IsNullOrEmpty(chatRequest.ChatId) && !String.IsNullOrEmpty(chatRequest.UserInput))
                {
                    response = await chatEngine.HandleRequest(chatRequest);

                    chatRequest.ChatId = response.ChatId;
                }

                if (response == null || String.IsNullOrEmpty(response.Status.Error))
                {
                    response = await chatEngine.HandleRequest(chatRequest);
                }

                if (!trustedClient)
                {
                    response.TrustedClientData = null;
                }

                return(Ok(response));
            }
            catch (Exception ex)
            {
                logger.Error("Post failed.", ex);
            }

            return(BadRequest());
        }
示例#47
0
 public ChatResult Chat([FromBody] ChatRequest chat)
 {
     return(Chat(chat.Text, chat.ChatBotId));
 }
 void failedQuest()
 {
     foreach (string s in fAQLines) {
         ChatRequest c = new ChatRequest(s);
         ch.sendRequest(c);
     }
     npcb.removeQuest ();
     complete = true;
     started = false;
     trigger.reset ();
 }
示例#49
0
 public abstract Guid RequestChat(ChatRequest request);
示例#50
0
 public void setChatRequest(ChatRequest cr)
 {
     chatRequest = cr;
 }
 public ChatServiceRequest(ChatRequest requestType)
     : base(Service.Chat)
 {
     this.requestType = requestType;
 }