internal void CanSerializeAndDeserialize_Disconnected()
        {
            // Arrange
            var correlationId = Guid.NewGuid();

            var response = new Disconnected(
                "Ok",
                new ServerId("NautilusData.TickProvider"),
                SessionId.Create(new ClientId("Trader-001"), StubZonedDateTime.UnixEpoch(), "None"),
                correlationId,
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            // Act
            var packed   = this.serializer.Serialize(response);
            var unpacked = (Disconnected)this.serializer.Deserialize(packed);

            // Assert
            Assert.Equal(response, unpacked);
            Assert.Equal(correlationId, unpacked.CorrelationId);
            Assert.Equal("NautilusData.TickProvider", unpacked.ServerId.Value);
            Assert.Equal("Trader-001-e5db3dad8222a27e5d2991d11ad65f0f74668a4cfb629e97aa6920a73a012f87", unpacked.SessionId.Value);
            this.Output.WriteLine(Convert.ToBase64String(packed));
            this.Output.WriteLine(Encoding.UTF8.GetString(packed));
        }
예제 #2
0
        /// <summary>
        /// 包含获取创建session的机制
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            //actionContext.Request.Headers.Add("Access-Control-Allow-Origin", "*");
            var controller = (BaseController)actionContext.ControllerContext.Controller;

            if (controller is IRequiresSessionState)
            {    //有session需求
                var sessionId = controller.ReadCookie("Customer-Session");
                if (sessionId == null || sessionId.Count() == 0)
                {
                    sessionId = SessionId.Create(ref this._randgen);
                    var response = HttpContext.Current.Response;  //有线程问题
                    var cookie   = new HttpCookie("Customer-Session", sessionId);
                    cookie.Expires = DateTime.MaxValue;
                    response.Cookies.Add(cookie);
                    lock (locker)
                    {
                        //无sessionid
                        if (!SessionContainer.ContainsKey(sessionId))
                        {
                            controller.Session = new SessionState(sessionId, SessionContainer.TimeOut);

                            SessionContainer.Add(sessionId, controller.Session);
                        }
                        else
                        {
                            //session生成重合的情况    暂时复用   有风险
                            controller.Session = SessionContainer[sessionId];
                        }
                    }
                }
                else
                {
                    lock (locker)
                    {
                        if (SessionContainer.ContainsKey(sessionId))
                        {  //有sessionid 有存储
                            controller.Session = SessionContainer[sessionId];
                        }
                        else
                        {
                            //有sessionid 无存储 (session丢失或者过期 重新生成)
                            SessionContainer.Remove(sessionId);
                            sessionId = SessionId.Create(ref this._randgen);
                            var response = HttpContext.Current.Response;  //有线程问题
                            var cookie   = new HttpCookie("Customer-Session", sessionId);
                            cookie.Expires = DateTime.MaxValue;
                            response.Cookies.Add(cookie);

                            controller.Session = new SessionState(sessionId, SessionContainer.TimeOut);
                            SessionContainer.Add(sessionId, controller.Session);
                        }
                    }
                }
            }
        }
예제 #3
0
        internal void CanSerializeAndDeserialize_DisconnectRequests()
        {
            // Arrange
            var serializer = new MsgPackRequestSerializer();

            var request = new Disconnect(
                new ClientId("Trader-001"),
                SessionId.Create(new ClientId("Trader-001"), StubZonedDateTime.UnixEpoch(), "None"),
                Guid.NewGuid(),
                StubZonedDateTime.UnixEpoch());

            // Act
            var packed   = serializer.Serialize(request);
            var unpacked = (Disconnect)serializer.Deserialize(packed);

            // Assert
            Assert.Equal(request, unpacked);
            Assert.Equal(new ClientId("Trader-001"), unpacked.ClientId);
            Assert.Equal("Trader-001-e5db3dad8222a27e5d2991d11ad65f0f74668a4cfb629e97aa6920a73a012f87", unpacked.SessionId.Value);
        }