示例#1
0
        private void SetDefaultActions()
        {
            CEchoRequestReceivedAction = (cEchoReq, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cEchoReq.GetLogString());
                if (!asc.ServiceClass.SupportedAbstractSyntaxes.Contains(AbstractSyntax.VERIFICATION))
                {
                    return;
                }
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                var response = new CEchoResponse(cEchoReq, Status.SUCCESS);
                PDataMessenger.Send(response, asc);
                RaiseDIMSERequestReceived(cEchoReq, asc);
            };

            CEchoResponseReceivedAction = (cEchoRp, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cEchoRp.GetLogString());
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived(cEchoRp, asc);
                AssociationMessenger.SendReleaseRequest(asc);
            };

            CGetRequestReceivedAction = (cGetReq, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cGetReq.GetLogString());
                cGetReq.LogData(asc);
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                RaiseDIMSERequestReceived(cGetReq, asc);
                throw new NotImplementedException();
            };

            CGetResponseReceivedAction = (cGetRes, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cGetRes.GetLogString());
                cGetRes.LogData(asc);
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived(cGetRes, asc);
                if (cGetRes.Status != (ushort)Status.PENDING)
                {
                    AssociationMessenger.SendReleaseRequest(asc);
                }
            };

            CMoveRequestReceivedAction = (cMoveReq, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cMoveReq.GetLogString());
                cMoveReq.LogData(asc);
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                RaiseDIMSERequestReceived(cMoveReq, asc);
                throw new NotImplementedException();
            };

            CMoveResponseReceivedAction = (cMoveRes, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cMoveRes.GetLogString());
                cMoveRes.LogData(asc);
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived(cMoveRes, asc);
                if (cMoveRes.Status != (ushort)Status.PENDING)
                {
                    AssociationMessenger.SendReleaseRequest(asc);
                }
            };
        }
示例#2
0
        private void SetDefaultActions()
        {
            CEchoRequestReceivedAction = (cEchoReq, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cEchoReq.GetLogString());
                if (!asc.ServiceClass.SupportedAbstractSyntaxes.Contains(AbstractSyntax.VERIFICATION))
                {
                    return;
                }
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                var response = new CEchoResponse(cEchoReq, Status.SUCCESS);
                PDataMessenger.Send(response, asc);
                RaiseDIMSERequestReceived <CEchoRequest>(cEchoReq, asc);
            };

            CEchoResponseReceivedAction = (cEchoRp, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cEchoRp.GetLogString());
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived <CEchoResponse>(cEchoRp, asc);
                AssociationMessenger.SendReleaseRequest(asc);
            };

            CFindResponseReceivedAction = (cFindResp, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cFindResp.GetLogString());
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived <CFindResponse>(cFindResp, asc);
                cFindResp.LogData(asc);
                if (cFindResp.Status != (ushort)Status.PENDING)
                {
                    AssociationMessenger.SendReleaseRequest(asc);
                }
            };

            CMoveRequestReceivedAction = (cMoveReq, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cMoveReq.GetLogString());
                cMoveReq.LogData(asc);
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                RaiseDIMSERequestReceived <CMoveRequest>(cMoveReq, asc);
                throw new NotImplementedException();
            };

            CMoveResponseReceivedAction = (cMoveRes, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cMoveRes.GetLogString());
                cMoveRes.LogData(asc);
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived <CMoveResponse>(cMoveRes, asc);
                if (cMoveRes.Status != (ushort)Status.PENDING)
                {
                    AssociationMessenger.SendReleaseRequest(asc);
                }
            };

            CStoreRequestReceivedAction = async(req, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + req.GetLogString());
                req.LogData(asc);
                asc.LastActive = DateTime.Now;
                asc.State      = NetworkState.TRANSPORT_CONNECTION_OPEN;
                var           resp   = new CStoreResponse(req, Status.SUCCESS);
                IDICOMElement syntax = req.Data.FindFirst(TagHelper.SOPCLASS_UID);
                RaiseDIMSERequestReceived <CStoreRequest>(req, asc);

                if (syntax != null)
                {
                    //If can store (supported Abstract Syntax) - Try
                    if (asc.PresentationContexts.Any(p => p.Id == req.DataPresentationContextId))
                    {
                        try
                        {
                            bool success = CStorePayloadAction(req.Data, asc);
                            resp.Status = success ? resp.Status : (ushort)Status.FAILURE;
                            PDataMessenger.Send(resp, asc, asc.PresentationContexts.First(p => p.Id == req.DataPresentationContextId));
                        }
                        catch (Exception e)
                        {
                            resp.Status = (ushort)Status.FAILURE;
                            PDataMessenger.Send(resp, asc);
                        }
                    }
                    else
                    {
                        //Abstract syntax not supported
                        resp.Status = (ushort)Status.FAILURE;
                        PDataMessenger.Send(resp, asc);
                    }
                }
            };

            CStoreResponseReceivedAction = (cStoreResp, asc) =>
            {
                asc.Logger.Log("<-- DIMSE" + cStoreResp.GetLogString());
                cStoreResp.LogData(asc);
                asc.LastActive = DateTime.Now;
                RaiseDIMSEResponseReceived <CStoreResponse>(cStoreResp, asc);
                if (cStoreResp.Status != (ushort)Status.PENDING)
                {
                    AssociationMessenger.SendReleaseRequest(asc);
                }
            };

            CStorePayloadAction = (dcm, asc) => { return(true); };
        }