public void Send_MustHandleSessionStartRequest()
        {
            var args          = default(SessionStartEventArgs);
            var sync          = new AutoResetEvent(false);
            var configuration = new ServiceConfiguration {
                SessionId = Guid.NewGuid()
            };
            var sessionStartRequested = false;

            sut.SessionStartRequested += (a) => { args = a; sessionStartRequested = true; sync.Set(); };

            var token   = sut.Connect().CommunicationToken.Value;
            var message = new SessionStartMessage(configuration)
            {
                CommunicationToken = token
            };
            var response = sut.Send(message);

            sync.WaitOne();

            Assert.IsTrue(sessionStartRequested);
            Assert.IsNotNull(args);
            Assert.IsNotNull(response);
            Assert.IsInstanceOfType(response, typeof(SimpleResponse));
            Assert.AreEqual(configuration.SessionId, args.Configuration.SessionId);
            Assert.AreEqual(SimpleResponsePurport.Acknowledged, (response as SimpleResponse)?.Purport);
        }
Пример #2
0
        public string StartSession(string sessionKey)
        {
            SessionStartMessage ssm = null;

            lock (lockObject)
            {
                var sess = sessions.Find(x => x.SessionKey == sessionKey);
                if (sess == null || sess.RequestedUtc == DateTime.MinValue)
                {
                    return(null);
                }
                ensureDocLoaded(sess.DocId);
                var doc = docs.Find(x => x.DocId == sess.DocId);
                if (doc == null)
                {
                    return(null);
                }
                ssm = new SessionStartMessage
                {
                    Name           = doc.Name,
                    RevisionId     = doc.Revisions.Count - 1,
                    Text           = doc.HeadText,
                    PeerSelections = getDocSels(doc.DocId),
                };
                sess.RequestedUtc = DateTime.MinValue;
                sess.Selection    = new Selection {
                    Start = 0, End = 0
                };
            }
            return(JsonConvert.SerializeObject(ssm));
        }