/// <summary> /// This close method is initiated by the transport context. /// </summary> /// <param name="context">The current context.</param> public override void Close(TransportContext context) { TransportContextTCPIP tcpContext = context as TransportContextTCPIP; if (tcpContext.ClosePending) return; tcpContext.ClosePending = true; IXimuraRQRSEnvelope Env = null; try { Env = context.EnvelopeHelper.GetCallback(context.ServerCommandID.Value); context.SenderIdentitySet(Env); Env.DestinationAddress = new EnvelopeAddress(context.ServerCommandID.Value, "Close"); IXimuraProtocolConnectionRequest Request = Env.Request as IXimuraProtocolConnectionRequest; IXimuraProtocolConnectionResponse Response = Env.Response as IXimuraProtocolConnectionResponse; Request.ProtocolContextID = context.SignatureID; Request.RemoteUri = context.UriRemote; Request.LocalUri = context.UriLocal; Request.ConnectionType = TransportConnectionType.Connectionful; //We want a new server context, so we will not send an ID. Request.ServerContextID = context.ServerContextID; context.ContextSession.ProcessRequest(Env); } finally { if (Env != null && Env.ObjectPoolCanReturn) Env.ObjectPoolReturn(); } tcpContext.SocketClose(); }