Example #1
0
    public static event EventHandler <VisitorLeaveEventArgs> VisitorLeave; // 访客离开

    /// <summary>
    /// 保存一条新访客会话
    /// </summary>
    /// <param name="session"></param>
    public static void NewSession(VisitSession session)
    {
        Trace.WriteLine(string.Format("VisitSessionService.NewSession : {0}", session.ToString()));

        if (GetSessionById(session.SessionId) != null)
        {
            Trace.WriteLine("Error: chat is aleady exist");
            return;
        }
        sessions.Add(new VisitSessionHit(session));
        Provider.NewSession(session);
        //
        if (NewVisiting != null)
        {
            NewVisiting(null, new NewVisitingEventArgs(VisitorService.GetVisitorById(session.VisitorId), session));
        }

        if (sessions.Count > MaxVisitorSessionCountInMemory)
        {
            for (int i = sessions.Count - 1; i >= 0; i--)
            {
                if (sessions[i].Session.Status == VisitSessionStatus.Leave)
                {
                    sessions.RemoveAt(i);
                    break;
                }
            }
        }
    }
Example #2
0
 public FeedController()
 {
     feedService    = new FeedService();
     friendService  = new FriendService();
     visitorService = new VisitorService();
     followService  = new FollowerService();
 }
Example #3
0
    /// <summary>
    /// 客服接受访客对话请求
    /// </summary>
    /// <param name="operatorId"></param>
    /// <param name="chatId"></param>
    /// <returns></returns>
    public static int AcceptChatRequest(string operatorId, string chatId)
    {
        Trace.WriteLine(string.Format("ChatService.AcceptChatRequest(OperatorId={0},ChatId={1})", operatorId, chatId));

        Chat chat = GetChatById(chatId);

        if (chat == null)
        {
            Trace.WriteLine(string.Format("Error: AcceptChatRequest(OperatorId={0},ChatId={1}) error, can't find this chat", operatorId, chatId));
            return(AcceptChatRequestReturn_Error_Others);
        }

        if (chat.Status == ChatStatus.Accepted)
        {
            return(AcceptChatRequestReturn_Error_AcceptedByOthers);
        }
        else if (chat.Status == ChatStatus.Requested)
        {
            chat.Status     = ChatStatus.Accepted;
            chat.OperatorId = operatorId;
            chat.AcceptTime = DateTime.Now;

            if (VisitorChatRequestAccepted != null)
            {
                VisitorChatRequestAccepted(null, new VisitorChatRequestAcceptedEventArgs(new VisitorChatRequestEventArgs(chat.VisitorId, chat)));
            }
            Message m1 = new Message();
            m1.ChatId   = chat.ChatId;
            m1.SentDate = DateTime.Now;
            m1.Type     = MessageType.SystemMessage_ToVisitor;
            m1.Text     = string.Format("客服:{0}已经接受您的对话请求", OperatorService.GetOperatorById(operatorId).NickName);
            SendMessage(m1);

            Message m2 = new Message();
            m2.ChatId   = chat.ChatId;
            m2.SentDate = DateTime.Now;
            m2.Type     = MessageType.SystemMessage_ToOperator;
            m2.Text     = string.Format("你已经接受访客{0}的对话请求", VisitorService.GetVisitorById(chat.VisitorId).Name);
            SendMessage(m2);

            OperatorService.SetOperatorStatus(operatorId, OperatorStatus.Chatting);

            VisitSession s = VisitSessionService.GetSessionById(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId);
            s.OperatorId  = operatorId;
            s.Status      = VisitSessionStatus.Chatting;
            s.ChatingTime = DateTime.Now;

            return(AcceptChatRequestReturn_OK);
        }
        else if (chat.Status == ChatStatus.Closed)
        {
            return(AcceptChatRequestReturn_Error_ChatRequestCanceled);
        }
        else
        {
            Trace.WriteLine(string.Format("ChatService.AccpetChatRequest({0},{1}) error,status illegal: ChatStatus={2}", operatorId, chatId, chat.Status));
            return(AcceptChatRequestReturn_Error_Others);
        }
    }
Example #4
0
 public SpaceLayoutController()
 {
     skinService     = new SkinService();
     userAppService  = new UserAppService();
     visitorService  = new VisitorService();
     menuService     = new UserMenuService();
     siteSkinService = new SiteSkinService();
 }
Example #5
0
        private void addRegTemplate()
        {
            VisitorService vs = new VisitorService();

            _visitList = vs.GetAllVisitors();

            Robot.AddRegTemplateToFPCache(_visitList);
        }
Example #6
0
 public MicroblogController()
 {
     microblogService = new MicroblogService();
     followService    = new FollowerService();
     visitorService   = new VisitorService();
     mfService        = new MicroblogFavoriteService();
     commentService   = new OpenCommentService();
     matService       = new MicroblogAtService();
     userTagService   = new UserTagService();
 }
Example #7
0
 public MicroblogController()
 {
     microblogService = new MicroblogService();
     followService    = new FollowerService();
     visitorService   = new VisitorService();
     mfService        = new MicroblogFavoriteService();
     commentService   = new MicroblogCommentService();
     matService       = new MicroblogAtService();
     videoSpider      = new WojiluVideoSpider();
 }
Example #8
0
        /// <summary>
        /// 访客接受某客服的对话 to-all
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ChatService_VisitorChatRequestAccepted(object sender, VisitorChatRequestAcceptedEventArgs e)//tao-no
        {
            Visitor       visitor = VisitorService.GetVisitorById(e.VisitorChatRequest.VisitorId);
            List <Socket> ss      = new List <Socket>();

            foreach (var item in  GetOnlineOperatorSockets(visitor.AccountId))
            {
                sh.SendPacket(item, e);
            }
        }
Example #9
0
        void VisitSessionService_VisitorLeave(object sender, VisitorLeaveEventArgs e)
        {
            Visitor       visitor = VisitorService.GetVisitorById(e.VisitorId);
            List <Socket> ss      = new List <Socket>();

            foreach (var item in GetOnlineOperatorSockets(visitor.AccountId))
            {
                sh.SendPacket(item, e);
            }
        }
Example #10
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (_currentVisitor == null)
            {
                VisitorService  vs  = new VisitorService();
                VisitLogService vls = new VisitLogService();

                if (txtName.Text.Trim().Length > 0 && txtMobile.Text.Trim().Length > 0 && txtIdentity.Text.Trim().Length > 0)
                {
                    _newVisitor = vs.AddVisitor(txtName.Text.Trim(), txtMobile.Text.Trim(), txtIdentity.Text.Trim(), txtCompany.Text.Trim(), Robot.GetLatestTemplate());
                    if (txtPurpose.Text.Trim().Length > 0 && txtRecepter.Text.Trim().Length > 0 && _newVisitor != null)
                    {
                        if (validateTime(txtTime.Text.Trim()))
                        {
                            vls.AddLog(txtTime.Text.Trim(), txtPurpose.Text.Trim(), txtRecepter.Text.Trim(), txtRemark.Text.Trim(), _newVisitor.Id);

                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("访问时间格式不正确,请重新填写!", "提示");
                        }
                    }
                    else
                    {
                        MessageBox.Show("访客信息不完整,请补充完整!", "提示");
                    }
                }
                else
                {
                    MessageBox.Show("身份信息不完整,请补充完整!", "提示");
                }
            }
            else
            {
                VisitLogService vls = new VisitLogService();
                if (txtPurpose.Text.Trim().Length > 0 && txtRecepter.Text.Trim().Length > 0)
                {
                    if (validateTime(txtTime.Text.Trim()))
                    {
                        vls.AddLog(txtTime.Text.Trim(), txtPurpose.Text.Trim(), txtRecepter.Text.Trim(), txtRemark.Text.Trim(), _currentVisitor.Id);

                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("访问时间格式不正确,请重新填写!", "提示");
                    }
                }
                else
                {
                    MessageBox.Show("访客信息不完整,请补充完整!", "提示");
                }
            }
        }
Example #11
0
    /// <summary>
    /// 关闭对话信息
    /// </summary>
    /// <param name="chatId"></param>
    /// <param name="userName"></param>
    public static bool CloseChat(string chatId, string closeBy)
    {
        Trace.WriteLine(string.Format("ChatService.CloseChat(ChatId = {0},CloseBy={1})", chatId, closeBy));
        Chat chat = GetChatById(chatId);

        if (chat == null)
        {
            Trace.WriteLine("Waring: ChatService.CloseChat() error ,ChatId " + chatId + " not found");
            return(false);
        }

        if (chat.Status == ChatStatus.Closed)
        {
            Trace.WriteLine("Waring: ChatService.CloseChat() is closed aleady ,ChatId " + chatId);
            try
            {
                Directory.Delete(ChatTempDataDir + chatId, true);
            }
            catch (Exception)
            {
            }
            return(true);
        }

        if (ChatStatusChanged != null)
        {
            ChatStatusChanged(null, new ChatStatusChangedEventArgs(chatId, ChatStatus.Closed));
        }

        Message m = new Message();

        m.ChatId   = chatId;
        m.SentDate = DateTime.Now;
        m.Type     = MessageType.SystemMessage_ToBoth;
        m.Text     = string.Format("{0}已关闭对话", closeBy);
        SendMessage(m);

        chat.Status    = ChatStatus.Closed;
        chat.CloseTime = DateTime.Now;
        chat.CloseBy   = closeBy;
        if (chat.OperatorId == null || chat.OperatorId == "")
        {
            chat.OperatorId = null;
        }
        Provider.CloseChat(chat);

        VisitSessionService.SetSessionStatus(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId, VisitSessionStatus.Visiting);
        // 注意: IsOperatorHasActiveChat需要在更改chat status后调用
        if (!string.IsNullOrEmpty(chat.OperatorId) && !IsOperatorHasActiveChat(chat.OperatorId) && OperatorService.IsOperatorOnline(chat.OperatorId))
        {
            OperatorService.SetOperatorStatus(chat.OperatorId, OperatorStatus.Idle);//关闭时改变客服状态
        }
        return(true);
    }
        public IHttpActionResult Get(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            VisitorService service = CreateVisitorService();

            return(Ok(service.GetVisitorByID(id.Value)));
        }
Example #13
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="apiKey">The api key credential</param>
        public WistiaStatsClient(string apiKey)
        {
            if (string.IsNullOrWhiteSpace(apiKey))
            {
                throw new ArgumentNullException(apiKey);
            }

            Account  = new AccountService(apiKey);
            Projects = new ProjectService(apiKey);
            Media    = new MediaService(apiKey);
            Visitor  = new VisitorService(apiKey);
        }
Example #14
0
 public HomeController()
 {
     microblogService = new MicroblogService();
     followService    = new FollowerService();
     visitorService   = new VisitorService();
     mfService        = new MicroblogFavoriteService();
     commentService   = new OpenCommentService();
     photoPostService = new PhotoPostService();
     friendService    = new FriendService();
     blogAppService   = new BlogService();
     photoAppService  = new PhotoService();
 }
Example #15
0
        /// <summary>
        /// 访客请请求 to-all
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ChatService_VisitorChatRequest(object sender, VisitorChatRequestEventArgs e)
        {
            Visitor v = VisitorService.GetVisitorById(e.VisitorId);

            if (v != null)
            {
                List <Socket> sockets = GetOnlineOperatorSockets(v.AccountId);
                foreach (var item in sockets)
                {
                    sh.SendPacket(item, new VisitorChatRequestEventArgs(e.VisitorId, e.Chat));
                }
            }
        }
Example #16
0
        private void StoreVisitor()
        {
            VisitorService VisitorManager = new VisitorService();
            var            visitor        = Visitors.First();

            ((ICRUDService)VisitorManager).Create(
                visitor.Name,
                visitor.Email,
                visitor.Age,
                visitor.Gender,
                visitor.Password
                );
        }
Example #17
0
        void VisitSessionService_NewVisiting(object sender, NewVisitingEventArgs e)
        {
            Visitor       visitor = VisitorService.GetVisitorById(e.Visitor.VisitorId);
            List <Socket> ss      = new List <Socket>();

            foreach (var item in GetOnlineOperatorSockets(visitor.AccountId))
            {
                if (item.Connected)
                {
                    sh.SendPacket(item, e);
                }
            }
        }
Example #18
0
        public void TestGetVisitorById()
        {
            VisitorService.Provider = new MyVisitorProvider();
            Visitor      v = new Visitor();
            VisitSession s = new VisitSession();

            s.VisitorId      = v.VisitorId;
            s.Status         = VisitSessionStatus.Leave; // 离开
            v.AccountId      = accountIdA;
            v.CurrentSession = s;
            VisitorService.NewVisitor(v);

            Assert.AreSame(v, VisitorService.GetVisitor(v.VisitorId));
            Assert.IsNull(VisitorService.GetVisitor("dddd"));
        }
        public IHttpActionResult Put(VisitorEdit model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            VisitorService service = CreateVisitorService();

            if (service.UpdateExistingVisitor(model))
            {
                return(Ok());
            }

            return(InternalServerError());
        }
        public IHttpActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            VisitorService service = CreateVisitorService();

            if (service.DeleteVisitor(id.Value))
            {
                return(Ok());
            }

            return(InternalServerError());
        }
Example #21
0
    /// <summary>
    /// 客服主动邀请对话
    /// </summary>
    /// <param name="operatorId">客服ID</param>
    /// <param name="visitorId"></param>
    public static Chat OperatorRequestChat(string operatorId, string visitorId)
    {
        Trace.WriteLine(string.Format("ChatService.OperatorRequestChat(OperatorId = {0},VisitorId = {1})", operatorId, visitorId));
        Visitor  visitor = VisitorService.GetVisitorById(visitorId);
        Operator op      = OperatorService.GetOperatorById(operatorId);

        if (visitor == null || op == null)
        {
            Trace.WriteLine(string.Format("Error: ChatService.OperatorRequestChat({0},{1}) error Opertor or Visitor is null", operatorId, visitorId));
            return(null);
        }

        Chat chat = new Chat();

        chat.IsInviteByOperator = true;
        chat.CreateBy           = op.NickName;
        chat.CreateTime         = DateTime.Now;
        chat.LastCheckTime      = DateTime.Now.Ticks;
        chat.AccountId          = op.AccountId;
        chat.VisitorId          = visitorId;
        chat.OperatorId         = operatorId;
        chats.Add(chat);
        Provider.AddChat(chat);

        op.Status   = OperatorStatus.InviteChat;//将客服改为请求中
        chat.Status = ChatStatus.Requested;
        //VisitSessionService.SetSessionStatus(visitor.CurrentSessionId, VisitSessionStatus.ChatRequesting);

        if (OperatorChatRequest != null)
        {
            var req = new OperatorChatRequestEventArgs(operatorId, visitorId, chat);
            OperatorChatRequest(null, req);
        }

        Message m = new Message();

        m.ChatId = chat.ChatId;
        m.Text   = "正在邀请访客,请稍等...";
        m.Type   = MessageType.SystemMessage_ToOperator;
        SendMessage(m, DateTime.Now.AddMilliseconds(50));

        return(chat);
    }
Example #22
0
        public async Task VisitorService_GetAll_Returns_Visitors()
        {
            // Arrange
            var optionsBuilder  = new DbContextOptionsBuilder <AntipaDbContext>().UseInMemoryDatabase("antipadb");
            var existingVisitor = new Visitor {
                Age = 1
            };

            using (var dbContext = new AntipaDbContext(optionsBuilder.Options))
            {
                // Act
                var sut = new VisitorService(dbContext);
                await sut.CreateVisitor(existingVisitor);


                // Assert
                Assert.NotEmpty(await sut.GetAll());
            }
        }
Example #23
0
    /// <summary>
    /// 页面请求对话
    /// </summary>
    /// <param name="CurrentVisitor"></param>
    /// <returns>ChatId</returns>
    public static string ChatPageRequestChat(Visitor visitor)
    {
        Trace.WriteLine(string.Format("ChatService.ChatPageRequestChat(Visitor = {0})", visitor));
        if (!string.IsNullOrEmpty(visitor.Name))
        {
            Visitor vs = VisitorService.GetVisitorById(visitor.VisitorId);
            vs.Name = visitor.Name;
            VisitorService.UpdateVisitor(vs);
        }
        Chat chatRequest = new Chat();

        chatRequest.AccountId  = visitor.AccountId;
        chatRequest.CreateTime = DateTime.Now;
        chatRequest.Status     = ChatStatus.Requested;
        chatRequest.VisitorId  = visitor.VisitorId;

        chats.Add(chatRequest);
        Provider.AddChat(chatRequest);

        VisitSession s = VisitSessionService.GetSessionById(visitor.CurrentSessionId);

        s.ChatRequestTime = DateTime.Now;
        s.Status          = VisitSessionStatus.ChatRequesting;

        Message m = new Message();

        m.ChatId      = chatRequest.ChatId;
        m.Text        = "正在接入客服,请稍等...";
        m.Type        = MessageType.SystemMessage_ToVisitor;
        m.Source      = "系统";
        m.Destination = "访客";
        SendMessage(m, DateTime.Now.AddMilliseconds(100));

        if (VisitorChatRequest != null)
        {
            VisitorChatRequestEventArgs req = new VisitorChatRequestEventArgs(visitor.VisitorId, chatRequest);
            visitorChatRequests.Add(req);
            VisitorChatRequest(null, req);
        }

        return(chatRequest.ChatId);
    }
Example #24
0
    // TODO: 该方法需要重新设计
    /// <summary>
    /// 查询在这个时候之后新加的访客会话信息
    /// </summary>
    /// <param name="lastCheck">会话ID</param>
    /// <returns>VisitSession对象</returns>
    ///
    public static List <VisitSession> GetVisitSessionChange(string accountId, long lastCheck)
    {
        Trace.WriteLine(string.Format("{0}({1},{2})", MethodBase.GetCurrentMethod().Name, accountId, lastCheck));
        StringBuilder       sb  = new StringBuilder();
        List <VisitSession> vss = new List <VisitSession>();

        foreach (VisitSessionHit item in sessions)
        {
            Visitor v = VisitorService.GetVisitorById(item.Session.VisitorId);
            if (v != null && v.AccountId == accountId)
            {
                vss.Add(v.CurrentSession);
                //sb.AppendFormat("SessionId={0},Status={1},VisitId={2} | ",v.CurrentSessionId,v.CurrentSession.Status.ToString(),v.VisitorId);
            }
        }

        Trace.WriteLine(string.Format("Return {0} : {1}", vss.Count, sb.ToString()));

        return(vss);
    }
Example #25
0
        public void TestGetNewVisitor()
        {
            VisitorService.Provider = new MyVisitorProvider();
            Visitor      v = new Visitor();
            VisitSession s = new VisitSession();

            s.VisitorId      = v.VisitorId;
            s.Status         = VisitSessionStatus.Leave; // 离开
            v.AccountId      = accountIdA;
            v.CurrentSession = s;
            VisitorService.NewVisitor(v);
            DateTime time = DateTime.Now.AddDays(1);

            s.VisitingTime = time;
            VisitorService.NewVisitor(v);

            Assert.AreEqual(0, VisitorService.GetNewVisitors(accountIdA, time.Ticks).Count);
            Assert.AreEqual(1, VisitorService.GetNewVisitors(accountIdA, DateTime.Now.Ticks).Count);
            Assert.AreEqual(0, VisitorService.GetNewVisitors(accountIdA, DateTime.Now.AddDays(2).Ticks).Count);
        }
        public async Task ValidateAsync_VisitorExists_DoesNothing()
        {
            // Arrange
            var visitorContainer = new Mock <IVisitorContainer>();

            var visitor            = new Visitor();
            var loyaltycardService = new Mock <ILoyaltyCardService>();
            var visitorDAL         = new Mock <IVisitorDAL>();
            var visitorIdentity    = new Mock <IVisitorIdentity>();

            visitorDAL.Setup(x => x.GetAsync(visitorIdentity.Object)).ReturnsAsync(visitor);

            var visitorGetService = new VisitorService(visitorDAL.Object, loyaltycardService.Object);

            // Act
            var action = new Func <Task>(() => visitorGetService.ValidateAsync(visitorContainer.Object));

            // Assert
            await action.Should().NotThrowAsync <Exception>();
        }
Example #27
0
        public ActionResult Create()
        {
            var service        = CreateVisitService();
            var visitorService = new VisitorService(Guid.Parse(User.Identity.GetUserId()));

            var unsortedVisitorList = new SelectList(visitorService.GetVisitors(), "VisitorId", "FullName");
            var visitorList         = unsortedVisitorList.OrderBy(o => o.Text);

            var unsortedParkList = new SelectList(service.GetOwnedList("Park"), "ParkId", "ParkName");
            var parkList         = unsortedParkList.OrderBy(o => o.Text);

            var unsortedTeamList = new SelectList(service.GetOwnedList("Team"), "TeamId", "TeamName");
            var teamList         = unsortedTeamList.OrderBy(o => o.Text);

            ViewBag.VisitorId  = visitorList;
            ViewBag.ParkId     = parkList;
            ViewBag.HomeTeamId = teamList;
            ViewBag.AwayTeamId = teamList;

            return(View());
        }
Example #28
0
        public void TestNewVisitor()
        {
            VisitorService.Provider = new MyVisitorProvider();

            Assert.AreEqual(0, VisitorService.GetAllOnlineVisitors(accountIdA).Count);
            Assert.AreEqual(0, VisitorService.GetAllOnlineVisitors(accountIdB).Count);
            Visitor      v = new Visitor();
            VisitSession s = new VisitSession();

            s.VisitorId      = v.VisitorId;
            s.Status         = VisitSessionStatus.Leave; // 离开
            v.AccountId      = accountIdA;
            v.CurrentSession = s;
            VisitorService.NewVisitor(v);
            Assert.AreEqual(0, VisitorService.GetAllOnlineVisitors(accountIdA).Count);
            Assert.AreEqual(0, VisitorService.GetAllOnlineVisitors(accountIdB).Count);

            s.Status = VisitSessionStatus.Visiting; // 浏览
            Assert.AreEqual(1, VisitorService.GetAllOnlineVisitors(accountIdA).Count);
            Assert.AreEqual(0, VisitorService.GetAllOnlineVisitors(accountIdB).Count);
        }
Example #29
0
    /// <summary>
    /// 接受客服邀请
    /// </summary>
    /// <param name="chatId"></param>
    public static void AcceptOperatorInvitation(string chatId)
    {
        Trace.WriteLine(string.Format("ChatService.AcceptOperatorInvitation(ChatId = {0})", chatId));
        Chat chat = GetChatById(chatId);

        if (chat != null)
        {
            chat.Status = ChatStatus.Accepted;
            if (chat.OperatorId != null)
            {
                OperatorService.GetOperatorById(chat.OperatorId).Status = OperatorStatus.Chatting;
            }
            VisitSession s = VisitSessionService.GetSessionById(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId);
            s.Status      = VisitSessionStatus.Chatting;                                                                //将访客状态改为对话中
            s.ChatingTime = DateTime.Now;
            OperatorChatRequestEventArgs opq = new OperatorChatRequestEventArgs(chat.OperatorId, chat.VisitorId, chat); //tao
            OperatorChatRequestAccepted(null, new OperatorChatRequestAcceptedEventArgs(opq));                           //tao
        }
        //SendMessage(new Message(chat.ChatId, "访客已接受对话邀请!", MessageType.SystemMessage_ToOperator));
        SendMessage(new Message(chat.ChatId, "您已接受对话邀请!", MessageType.SystemMessage_ToVisitor));
    }
Example #30
0
        public void TestInvite()
        {
            LiveSupport.LiveSupportDAL.SqlProviders.DBHelper.ConnectionString = "Server=rd01;Database=LiveSupport;User ID=sa;Password=;Trusted_Connection=False;";
            OperatorService.Provider = new MyOperatorProvider();
            Account a = TestTool.CreateNewAccount();

            AccountService.AddAccount(a);
            Operator o = TestTool.CreateNewOperator(a.AccountId);

            OperatorService.NewOperator(o);
            Visitor v = TestTool.CreateNewVisitor(a.AccountId);

            VisitorService.NewVisitor(v);
            VisitSessionService.NewSession(v.CurrentSession);

            Operator op = OperatorService.Login(a.LoginName, a.LoginName, a.Password);

            ChatService.OperatorRequestChat(op.OperatorId, v.VisitorId);

            Assert.AreEqual(v.CurrentSession.SessionId, ChatService.GetOperatorInvitation(v.VisitorId));
        }