MPPS SCU

  1. #ifndef CMPPS_H  
  2. #define CMPPS_H  
  3.   
  4. #include "dcmtk/config/osconfig.h"  
  5. #include "dcmtk/dcmdata/dcdatset.h"  
  6. #include "dcmtk/dcmdata/dcfilefo.h"  
  7. #include "dcmtk/dcmdata/dcdeftag.h"  
  8. #include "dcmtk/dcmnet/scu.h"  
  9. #include "DR_dataset.h"  
  10. #include "DR_dicom_node.h"  
  11.   
  12. class MPPSScu:public DcmSCU  
  13. {  
  14. public:  
  15.   MPPSScu(DR_Dicom_Node *node);  
  16.   //发送mpps  
  17.    void SendDcmMessage(mode::DR_Dataset *set,bool create);  
  18. public:  
  19.       
  20.     static DWORD WINAPI sendThreadProc(LPVOID lpParameter);  
  21.   
  22.      
  23.    OFBool  opt_secureConnection;  
  24.     
  25. };  
  26. #endif  
  1. #include "stdafx.h"  
  2. #include "CMPPSScu.h"  
  3. #include "droclog.h"  
  4. #include "GlobleParemter.h"  
  5. #include "Tool.h"  
  6. #include "droc3.h"  
  7. #include "DR_dicom_node.h"  
  8. #include "dcmtk/config/osconfig.h"  
  9. #include "dcmtk/ofstd/ofconapp.h"  
  10. #include "dcmtk/dcmdata/dcdict.h"  
  11. #include "dcmtk/dcmdata/cmdlnarg.h"  
  12. #include "dcmtk/dcmdata/dcuid.h"       /* for dcmtk version name */  
  13. #include "dcmtk/dcmdata/dcostrmz.h"  
  14.   
  15. #define   IN_PROGRESS   "IN PROGRESS"  
  16. #define   COMPLETED     "COMPLETED"  
  17. #define   DISCONTINUED  "DISCONTINUED"  
  18.   
  19. mode::DR_Dataset MPPSset;  
  20. std::string host;  
  21. int port;  
  22. std::string AEing;  
  23. std::string AECall;  
  24. int     opt_acse_timeout;  
  25. OFBool opt_secureConnection;  
  26.   
  27. int create=1;  
  28. //创建  
  29. void CteateCreateDataset();  
  30. //设置  
  31. void CteateSetDataset();  
  32. //取消  
  33. void CteateDiscontiunedSetDataset();  
  34. //发送消息  
  35. OFCondition SendMpps(DcmDataset *data,bool create);  
  36.   
  37. T_DIMSE_BlockingMode blockMode=DIMSE_BLOCKING;  
  38.   
  39. MPPSScu::MPPSScu(DR_Dicom_Node *node)  
  40. {  
  41.     opt_secureConnection=OFFalse;  
  42.     host=node->node_ip;  
  43.     port=node->node_port;  
  44.     AEing=node->node_calling_ae;  
  45.     AECall=node->node_called_ae;  
  46. }  
  47.   
  48. OFCondition SendMpps(DcmDataset *data,bool create)  
  49. {  
  50.       
  51.     OFString abstr=UID_ModalityPerformedProcedureStepSOPClass;  
  52.     OFString tr=UID_LittleEndianExplicitTransferSyntax;  
  53.   
  54.     OFString temp_str;  
  55.     T_ASC_Parameters *params;  
  56.     DIC_NODENAME localHost;  
  57.     DIC_NODENAME peerHost;  
  58.     T_ASC_Association *assoc;  
  59.     T_ASC_Network *net;  
  60.     int opt_maxReceivePDULength=16383;  
  61.   
  62.     const char* tre[] ={  
  63.         UID_LittleEndianImplicitTransferSyntax,  
  64.         UID_LittleEndianExplicitTransferSyntax,  
  65.         UID_BigEndianExplicitTransferSyntax,  
  66.         UID_DeflatedExplicitVRLittleEndianTransferSyntax};  
  67.   
  68.   
  69.     WSAData winSockData;  
  70.     /* we need at least version 1.1 */  
  71.     WORD winSockVersionNeeded = MAKEWORD( 1, 1 );  
  72.     WSAStartup(winSockVersionNeeded, &winSockData);  
  73.   
  74.     OFCondition cond = ASC_initializeNetwork(NET_REQUESTOR, 0, opt_acse_timeout, &net);  
  75.     if (cond.bad()) {  
  76.         return cond;  
  77.     }  
  78.     cond = ASC_createAssociationParameters(¶ms, opt_maxReceivePDULength);  
  79.       
  80.     ASC_setAPTitles(params, AEing.c_str(), AECall.c_str(), NULL);  
  81.     cond = ASC_setTransportLayerType(params, opt_secureConnection);  
  82.     if (cond.bad()){  
  83.         return cond;  
  84.     }  
  85.     gethostname(localHost, sizeof(localHost) - 1);  
  86.     sprintf(peerHost, "%s:%d", host.c_str(), port);  
  87.     ASC_setPresentationAddresses(params, localHost, peerHost);  
  88.   
  89.       
  90.     const char *ptr=tr.c_str();  
  91.     OFList<OFString> combinedSyntaxes;  
  92.     for (int i=0;i<DIM_OF(tre);i++){  
  93.         combinedSyntaxes.push_back(tre[i]);  
  94.     }  
  95.       
  96.     const char **transferSyntaxes = new const char*[combinedSyntaxes.size()];  
  97.     int transferSyntaxCount = 0;  
  98.     OFListConstIterator(OFString) s_cur = combinedSyntaxes.begin();  
  99.     OFListConstIterator(OFString) s_end = combinedSyntaxes.end();  
  100.     while (s_cur != s_end) {  
  101.         transferSyntaxes[transferSyntaxCount++] = (*s_cur).c_str();  
  102.         ++s_cur;  
  103.     }  
  104.     cond = ASC_addPresentationContext(params,1,  
  105.         abstr.c_str(), transferSyntaxes, transferSyntaxCount, ASC_SC_ROLE_SCU);  
  106.     //请求关联  
  107.     DICOM_INFO( "Requesting Association");  
  108.     cond = ASC_requestAssociation(net, params, &assoc);  
  109.     if (cond.bad()) {  
  110.         if (cond == DUL_ASSOCIATIONREJECTED) {  
  111.             T_ASC_RejectParameters rej;  
  112.   
  113.             ASC_getRejectParameters(params, &rej);  
  114.             DICOM_FATAL( "Association Rejected:" << OFendl << ASC_printRejectParameters(temp_str, &rej));  
  115.             delete[] transferSyntaxes;  
  116.             transferSyntaxes=0;  
  117.             return cond;  
  118.         } else {  
  119.             DICOM_FATAL( "Association Request Failed: " << DimseCondition::dump(temp_str, cond));  
  120.             delete[] transferSyntaxes;  
  121.             transferSyntaxes=0;  
  122.             return cond;  
  123.         }  
  124.     }  
  125.   
  126.     /* dump the connection parameters if in debug mode*/  
  127.     DICOM_DEBUG( ASC_dumpConnectionParameters(temp_str, assoc));  
  128.   
  129.     /* count the presentation contexts which have been accepted by the SCP */  
  130.     /* If there are none, finish the execution */  
  131.     if (ASC_countAcceptedPresentationContexts(params) == 0) {  
  132.         DICOM_FATAL( "No Acceptable Presentation Contexts");  
  133.         delete[] transferSyntaxes;  
  134.         transferSyntaxes=0;  
  135.         return cond;  
  136.     }  
  137.     T_ASC_PresentationContextID presId;  
  138.     presId = ASC_findAcceptedPresentationContextID(assoc, abstr.c_str());  
  139.   
  140.     //构建消息  
  141.     T_DIMSE_Message req, rsp;  
  142.     bzero((char*)&req, sizeof(req));  
  143.     bzero((char*)&rsp, sizeof(rsp));  
  144.   
  145.     if (create){  
  146.         T_DIMSE_N_CreateRQ n_creterq;  
  147.         bzero(OFreinterpret_cast(char*, &n_creterq), sizeof(n_creterq));  
  148.         strcpy(n_creterq.AffectedSOPClassUID, abstr.c_str());  
  149.         strcpy(n_creterq.AffectedSOPInstanceUID, MPPSset.stu.instansuid.c_str());  
  150.         n_creterq.opts=O_NCREATE_AFFECTEDSOPINSTANCEUID;  
  151.         n_creterq.DataSetType = DIMSE_DATASET_PRESENT;  
  152.         n_creterq.MessageID=1;  
  153.         req.CommandField = DIMSE_N_CREATE_RQ;  
  154.         req.msg.NCreateRQ = n_creterq;  
  155.           
  156.     }  
  157.     else{  
  158.         T_DIMSE_N_SetRQ n_setrq;  
  159.         bzero(OFreinterpret_cast(char*, &n_setrq), sizeof(n_setrq));  
  160.         strcpy(n_setrq.RequestedSOPClassUID, abstr.c_str());  
  161.         strcpy(n_setrq.RequestedSOPInstanceUID, MPPSset.stu.instansuid.c_str());  
  162.         n_setrq.DataSetType = DIMSE_DATASET_PRESENT;  
  163.         n_setrq.MessageID=1;  
  164.         req.CommandField = DIMSE_N_SET_RQ;  
  165.         req.msg.NSetRQ = n_setrq;  
  166.     }  
  167.     DcmDataset statedata;  
  168.     //发送消息  
  169.     //Sleep(2000);  
  170.     cond=DIMSE_sendMessageUsingMemoryData(assoc,presId,&req,&statedata,data,0,0);  
  171.   
  172.     if (cond.bad()){  
  173.         DICOM_FATAL( "Send Message failed");  
  174.           
  175.     }  
  176.     T_ASC_PresentationContextID thisPresId;   
  177.     thisPresId = presId;  
  178.     DcmDataset *statedata1;  
  179.     T_DIMSE_Message response;  
  180.   
  181.     cond = DIMSE_receiveCommand(assoc,blockMode, opt_acse_timeout, &thisPresId, &response, &statedata1);  
  182.     if (cond.bad())   
  183.         return cond;  
  184.   
  185.     cond = ASC_destroyAssociation(&assoc);  
  186.     if (cond.bad()) {  
  187.         DICOM_FATAL( DimseCondition::dump(temp_str, cond));  
  188.     }  
  189.     /* drop the network, i.e. free memory of T_ASC_Network* structure. This call */  
  190.     /* is the counterpart of ASC_initializeNetwork(...) which was called above. */  
  191.     cond = ASC_dropNetwork(&net);  
  192.     if (cond.bad()) {  
  193.         DICOM_FATAL( DimseCondition::dump(temp_str, cond));  
  194.     }  
  195.     delete[] transferSyntaxes;  
  196.   
  197.   
  198.     return EC_Normal;  
  199. }  
  200. void CteateCreateDataset()  
  201. {  
  202.     GlobleParemter *globle = GlobleParemter::GetInstance();  
  203.     CString modlity = globle->m_system_manage.modlity.c_str();  
  204.     std::string storagesopid;  
  205.   
  206.     if (modlity==_T("DX"))  //dx  
  207.     {  
  208.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  209.     }  
  210.     else if (modlity==_T("CR"))//cr  
  211.     {  
  212.         storagesopid=UID_ComputedRadiographyImageStorage;  
  213.     }  
  214.     else if(modlity==_T("CT")) //  
  215.     {  
  216.         storagesopid=UID_CTImageStorage;  
  217.     }  
  218.     else if (modlity==_T("RF")) //胃肠  
  219.     {  
  220.         storagesopid=UID_XRayRadiofluoroscopicImageStorage ;  
  221.     }  
  222.     else if(modlity==_T("MR"))  
  223.     {  
  224.         storagesopid=UID_MRImageStorage ;  
  225.     }  
  226.     else if (modlity==_T("MG"))  
  227.     {  
  228.         storagesopid=UID_DigitalMammographyXRayImageStorageForProcessing ;  
  229.     }  
  230.     else  
  231.     {  
  232.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  233.     }  
  234.     DcmDataset dcmset;  
  235.     dcmset.putAndInsertString(DCM_SpecificCharacterSet,"ISO_IR 100");  
  236.     dcmset.putAndInsertString(DCM_PatientID,MPPSset.pat.m_pid.c_str());  
  237.     dcmset.putAndInsertString(DCM_PatientName,MPPSset.pat.m_real_name.c_str());  
  238.     char *strmodlity=Tool::Convert1(modlity.GetBuffer());  
  239.     dcmset.putAndInsertString(DCM_Modality,strmodlity);  
  240.     delete []strmodlity;  
  241.     OFDate data;data.setISOFormattedDate(OFString(MPPSset.pat.m_birthday.c_str()));  
  242.     OFString datestr;  
  243.     data.getISOFormattedDate(datestr,false);  
  244.     dcmset.putAndInsertString(DCM_PatientBirthDate,datestr.c_str());  
  245.     std::string sex=MPPSset.pat.m_sex;  
  246.     std::string str_m,str_f,str_o;  
  247.     str_m=gettext("male");  
  248.     str_f=gettext("female");  
  249.     str_o=gettext("other");  
  250.     if (sex==str_m){  
  251.         sex="M";  
  252.     }  
  253.     else if (sex==str_f){  
  254.         sex="F";  
  255.     }  
  256.     else if (sex==str_o){  
  257.         sex="O";  
  258.     }  
  259.       
  260.     dcmset.putAndInsertString(DCM_PatientSex,sex.c_str());  
  261.     dcmset.putAndInsertString(DCM_StudyID,MPPSset.stu.s_sid.c_str());  
  262.     dcmset.putAndInsertString(DCM_PerformedStationName,MPPSset.stu.s_ae.c_str());  
  263.     dcmset.putAndInsertString(DCM_PerformedProcedureStepStatus,IN_PROGRESS);  
  264.     dcmset.putAndInsertString(DCM_PerformedProcedureStepID,MPPSset.stu.s_scheduled_ps.c_str());  
  265.     dcmset.putAndInsertString(DCM_PerformedStationAETitle ,MPPSset.stu.s_ae.c_str());  
  266.   
  267.     DcmSequenceOfItems  * ScheduledStepAttributesSequence=new DcmSequenceOfItems(DCM_ScheduledStepAttributesSequence);  
  268.     DcmItem *item=new DcmItem;  
  269.     ScheduledStepAttributesSequence->insert(item);  
  270.     item->putAndInsertString(DCM_AccessionNumber,MPPSset.stu.s_accession_num.c_str());  
  271.     item->putAndInsertString(DCM_RequestedProcedureDescription,MPPSset.stu.s_desc.c_str());  
  272.     item->putAndInsertString(DCM_ScheduledProcedureStepDescription,MPPSset.stu.s_desc.c_str());  
  273.     item->putAndInsertString(DCM_ScheduledProcedureStepID,MPPSset.stu.s_reserve1.c_str());  
  274.     item->putAndInsertString(DCM_RequestedProcedureID,MPPSset.stu.s_reserve2.c_str());  
  275.     item->putAndInsertString(DCM_StudyInstanceUID,MPPSset.stu.instansuid.c_str());  
  276.   
  277.     DcmSequenceOfItems  * ReferencedStudySequence=new DcmSequenceOfItems(DCM_ReferencedStudySequence);  
  278.     item->insert(ReferencedStudySequence);  
  279.     DcmItem *item0=new DcmItem;  
  280.     ReferencedStudySequence->insert(item0);  
  281.   
  282.     item0->putAndInsertString(DCM_ReferencedSOPClassUID,storagesopid.c_str());  
  283.     item0->putAndInsertString(DCM_ReferencedSOPInstanceUID,MPPSset.stu.instansuid.c_str());  
  284.       
  285.     dcmset.insert(ScheduledStepAttributesSequence);  
  286.       
  287.     SendMpps(&dcmset,1);  
  288.       
  289. }  
  290. void CteateSetDataset()  
  291. {  
  292.     GlobleParemter *globle = GlobleParemter::GetInstance();  
  293.     CString modlity = globle->m_system_manage.modlity.c_str();  
  294.     std::string storagesopid;  
  295.   
  296.     if (modlity==_T("DX"))  //dx  
  297.     {  
  298.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  299.     }  
  300.     else if (modlity==_T("CR"))//cr  
  301.     {  
  302.         storagesopid=UID_ComputedRadiographyImageStorage;  
  303.     }  
  304.     else if(modlity==_T("CT")) //  
  305.     {  
  306.         storagesopid=UID_CTImageStorage;  
  307.     }  
  308.     else if (modlity==_T("RF")) //胃肠  
  309.     {  
  310.         storagesopid=UID_XRayRadiofluoroscopicImageStorage ;  
  311.     }  
  312.     else if(modlity==_T("MR"))  
  313.     {  
  314.         storagesopid=UID_MRImageStorage ;  
  315.     }  
  316.     else if (modlity==_T("MG"))  
  317.     {  
  318.         storagesopid=UID_DigitalMammographyXRayImageStorageForProcessing ;  
  319.     }  
  320.     else  
  321.     {  
  322.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  323.     }  
  324.     DcmDataset dcmset;  
  325.     CTime t;  
  326.     t=CTime::GetCurrentTime();   
  327.     char date[50]; memset(date,0,50);  
  328.     char dtime[50];memset(dtime,0,50);  
  329.     sprintf(date,"%04d%02d%02d",t.GetYear(),t.GetMonth(),t.GetDay());  
  330.     sprintf(dtime,"%02d%02d%02d",t.GetHour(),t.GetMinute(),t.GetSecond());  
  331.     //在数据库查询实例uid 用检查实例uid代替  
  332.   
  333.     dcmset.putAndInsertString(DCM_SpecificCharacterSet,"ISO_IR 100");  
  334.     dcmset.putAndInsertString(DCM_SOPInstanceUID,MPPSset.stu.instansuid.c_str());  
  335.     dcmset.putAndInsertString(DCM_PerformedProcedureStepEndDate,date);  
  336.     dcmset.putAndInsertString(DCM_PerformedProcedureStepEndTime,dtime);  
  337.     dcmset.putAndInsertString(DCM_PerformedProcedureStepStatus,COMPLETED);  
  338.     DcmSequenceOfItems *ExposureDoseSequence=new DcmSequenceOfItems(DCM_ExposureDoseSequence);  
  339.     dcmset.insert(ExposureDoseSequence);  
  340.     DcmSequenceOfItems * PerformedSeriesSequence=new DcmSequenceOfItems(DCM_PerformedSeriesSequence);  
  341.     dcmset.insert(PerformedSeriesSequence);  
  342.       
  343.     DAO_Series dao;  
  344.     DAO_Protocol daopro;  
  345.     DAO_Instance daoins;  
  346.     std::vector<DR_Series> sers;  
  347.     dao.SelectBySid(sers,MPPSset.stu.s_id);  
  348.     int ls=sers.size();  
  349.     for (int i=0;i<ls;i++){  
  350.         DcmItem *sericeitem=new DcmItem;  
  351.         PerformedSeriesSequence->insert(sericeitem);  
  352.         sericeitem->putAndInsertString(DCM_SeriesDescription,sers[i].se_desc.c_str());  
  353.         sericeitem->putAndInsertString(DCM_SeriesInstanceUID,sers[i].instansuid.c_str());  
  354.         DR_Protocol pro;  
  355.         daopro.SelectById(pro,sers[i].se_protocol_id);  
  356.         sericeitem->putAndInsertString(DCM_ProtocolName,pro.protocol_name.c_str());  
  357.   
  358.         DcmSequenceOfItems *ReferencedImageSequence=new DcmSequenceOfItems(DCM_ReferencedImageSequence);  
  359.         sericeitem->insert(ReferencedImageSequence);  
  360.   
  361.         std::vector<DR_Instance> inss;  
  362.         daoins.Select(inss,sers[i].se_id);  
  363.         int lsi=inss.size();  
  364.         for (int j=0;j<lsi;j++){  
  365.             DcmItem *Imageitem=new DcmItem;  
  366.             ReferencedImageSequence->insert(Imageitem);  
  367.             Imageitem->putAndInsertString(DCM_ReferencedSOPClassUID,storagesopid.c_str());  
  368.             Imageitem->putAndInsertString(DCM_ReferencedSOPInstanceUID,inss[j].i_insiuid.c_str());  
  369.         }  
  370.     }  
  371.     DICOM_INFO("MPPS>>"<<DcmObject::PrintHelper(dcmset));   
  372.     SendMpps(&dcmset,0);  
  373. }  
  374. void CteateDiscontiunedSetDataset()  
  375. {  
  376.     GlobleParemter *globle = GlobleParemter::GetInstance();  
  377.     CString modlity = globle->m_system_manage.modlity.c_str();  
  378.     std::string storagesopid;  
  379.   
  380.     if (modlity==_T("DX"))  //dx  
  381.     {  
  382.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  383.     }  
  384.     else if (modlity==_T("CR"))//cr  
  385.     {  
  386.         storagesopid=UID_ComputedRadiographyImageStorage;  
  387.     }  
  388.     else if(modlity==_T("CT")) //  
  389.     {  
  390.         storagesopid=UID_CTImageStorage;  
  391.     }  
  392.     else if (modlity==_T("RF")) //胃肠  
  393.     {  
  394.         storagesopid=UID_XRayRadiofluoroscopicImageStorage ;  
  395.     }  
  396.     else if(modlity==_T("MR"))  
  397.     {  
  398.         storagesopid=UID_MRImageStorage ;  
  399.     }  
  400.     else if (modlity==_T("MG"))  
  401.     {  
  402.         storagesopid=UID_DigitalMammographyXRayImageStorageForProcessing ;  
  403.     }  
  404.     else  
  405.     {  
  406.         storagesopid=UID_DigitalXRayImageStorageForPresentation;  
  407.     }  
  408.     DcmDataset dcmset;  
  409.     CTime t;  
  410.     t=CTime::GetCurrentTime();   
  411.     char date[50]; memset(date,0,50);  
  412.     char dtime[50];memset(dtime,0,50);  
  413.     sprintf(date,"%04d%02d%02d",t.GetYear(),t.GetMonth(),t.GetDay());  
  414.     sprintf(dtime,"%02d%02d%02d",t.GetHour(),t.GetMinute(),t.GetSecond());  
  415.     //在数据库查询实例uid 用检查实例uid代替  
  416.   
  417.     dcmset.putAndInsertString(DCM_SpecificCharacterSet,"ISO_IR 100");  
  418.     dcmset.putAndInsertString(DCM_SOPInstanceUID,MPPSset.stu.instansuid.c_str());  
  419.     dcmset.putAndInsertString(DCM_PerformedProcedureStepEndDate,date);  
  420.     dcmset.putAndInsertString(DCM_PerformedProcedureStepEndTime,dtime);  
  421.     dcmset.putAndInsertString(DCM_PerformedProcedureStepStatus,DISCONTINUED);  
  422.     DcmSequenceOfItems *ExposureDoseSequence=new DcmSequenceOfItems(DCM_ExposureDoseSequence);  
  423.     dcmset.insert(ExposureDoseSequence);  
  424.     DcmSequenceOfItems * PerformedSeriesSequence=new DcmSequenceOfItems(DCM_PerformedSeriesSequence);  
  425.     dcmset.insert(PerformedSeriesSequence);  
  426.   
  427.     DAO_Series dao;  
  428.     DAO_Protocol daopro;  
  429.     DAO_Instance daoins;  
  430.     std::vector<DR_Series> sers;  
  431.     dao.SelectBySid(sers,MPPSset.stu.s_id);  
  432.     int ls=sers.size();  
  433.     for (int i=0;i<ls;i++){  
  434.         DcmItem *sericeitem=new DcmItem;  
  435.         PerformedSeriesSequence->insert(sericeitem);  
  436.         sericeitem->putAndInsertString(DCM_SeriesDescription,sers[i].se_desc.c_str());  
  437.         sericeitem->putAndInsertString(DCM_SeriesInstanceUID,sers[i].instansuid.c_str());  
  438.         DR_Protocol pro;  
  439.         daopro.SelectById(pro,sers[i].se_protocol_id);  
  440.         sericeitem->putAndInsertString(DCM_ProtocolName,pro.protocol_name.c_str());  
  441.   
  442.         DcmSequenceOfItems *ReferencedImageSequence=new DcmSequenceOfItems(DCM_ReferencedImageSequence);  
  443.         sericeitem->insert(ReferencedImageSequence);  
  444.   
  445.         std::vector<DR_Instance> inss;  
  446.         daoins.Select(inss,sers[i].se_id);  
  447.         int lsi=inss.size();  
  448.         for (int j=0;j<lsi;j++){  
  449.             DcmItem *Imageitem=new DcmItem;  
  450.             ReferencedImageSequence->insert(Imageitem);  
  451.             Imageitem->putAndInsertString(DCM_ReferencedSOPClassUID,storagesopid.c_str());  
  452.             Imageitem->putAndInsertString(DCM_ReferencedSOPInstanceUID,inss[j].i_insiuid.c_str());  
  453.         }  
  454.     }  
  455.     DICOM_INFO("MPPS>>"<<DcmObject::PrintHelper(dcmset));   
  456.     SendMpps(&dcmset,0);  
  457. }  
  458. void MPPSScu::SendDcmMessage(mode::DR_Dataset *set0,bool create_)  
  459. {  
  460.     MPPSset=*set0;  
  461.     create=create_;  
  462.     HANDLE th=CreateThread(NULL,0,sendThreadProc,0,0,NULL);  
  463.     CloseHandle(th);  
  464. }  
  465. DWORD WINAPI MPPSScu::sendThreadProc(LPVOID lpParameter)  
  466. {  
  467.     GlobleParemter *globle = GlobleParemter::GetInstance();  
  468.     if (globle->m_system_manage.Ismpps==_T("1")){  
  469.         DR_Dicom_Node node;  
  470.         DAO_Dicom_Node dno;  
  471.         dno.SelectByDef(node,"MPPS");  
  472.         if (!node.node_called_ae.empty()){  
  473.             host=node.node_ip;  
  474.             port=node.node_port;  
  475.             AEing=node.node_calling_ae;  
  476.             AECall=node.node_called_ae;  
  477.             if (create==1){  
  478.                 CteateCreateDataset();  
  479.             }  
  480.             else if(create==0){  
  481.                 CteateSetDataset();  
  482.             }  
  483.             else if (create==2){  
  484.                  CteateDiscontiunedSetDataset();  
  485.             }  
  486.         }  
  487.     }  
  488.     return 1;  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值