LDicomNet: OnBeforeSendCommandSet

# include“ltwrappr.h”

虚拟L_VOIDLDicomNet: OnBeforeSendCommandSet(电脑)

通知一个连接的命令集部分DIMSE之前LDicomNet:SendXxxResponse传播。

参数

LDicomDS*个人电脑

一个指针指向一个LDicomDS包含的命令集部分DIMSE SendXxxResponse消息。

返回

一个也没有。

评论

这个回调之前解雇的原因是以下功能:发送命令集部分

这允许一个SCP命令集添加/删除DICOM元素cs之前的传播。

这是有用的添加可选状态元素提供了额外的状态信息包括:

必需的dll和库

平台

Win32, x64

另请参阅

功能

主题

例子

这个例子展示了如何发送/检索额外的元素在DICOM命令集。
C-STORE-REQ是SCP。
SCP发送一个C-STORE-RSP与拒绝的状态:资源,并设置可选元素ErrorComment (0000、0902)
并读取可选的命令集元素ErrorComment (0000、0902)

名称空间LDicomNet_OnBeforeSendCommandSet_Namespace{/ /日志消息/ /这个实现日志到控制台,并调试窗口L_VOID LogMessage (TCHAR * szMsg){wprintf(文本(“\ n”));wprintf (szMsg);OutputDebugStringW(文本(“\ n”));OutputDebugStringW (szMsg);}L_VOID LogMessage (TCHAR * s, L_INT n){TCHAR szLog [200] = {0};wsprintf (szLog文本(“% s (% d)”)、s、n);LogMessage (szLog);}L_VOID LogMessage (TCHAR * s, TCHAR * s2){TCHAR szLog [200] = {0};wsprintf (szLog文本(“% s (% s)”),年代,s2);LogMessage (szLog);}/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /客户端类/ // /类,用于连接到服务器/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *CMyClient:公共LDicomNet{公共:CMyClient (L_INT32 nMode): LDicomNet (NULL, nMode){m_waitEvent = CreateEvent (NULL,真的,真的,文本(“ClientEvent”));ResetEvent (m_waitEvent);}~ CMyClient (无效){CloseHandle (m_waitEvent);}/ /客户端L_VOID OnConnect (L_INT nError);L_VOID OnReceiveAssociateAccept (LDicomAssociate * pPDU);L_VOID OnReceiveReleaseResponse ();L_VOID OnReceiveCStoreResponse (L_UCHAR nPresentationID, L_UINT16 nMessageID, L_TCHAR * pszClass L_TCHAR * pszInstance L_UINT16 nStatus);L_BOOL等(DWORD超时= 5000);私人:处理m_waitEvent;};/ /继续发送消息,直到hEvent暗示,我们的超时/ /返回TRUE hEvent是否暗示/ /如果超时,返回FALSEL_BOOL MessageLoop (处理hEvent,/ /处理需要等待DWORD超时/ /超时时间,以毫秒为单位){DWORD dwStart = GetTickCount ();味精味精= {0};挥发性L_BOOL bRunForever = TRUE;(bRunForever){如果(PeekMessage(味精,NULL, 0, 0, PM_REMOVE)){TranslateMessage(味精);DispatchMessage(味精);}如果(WaitForSingleObject (hEvent 0) = = WAIT_OBJECT_0){ResetEvent (hEvent);返回真正的;}DWORD dwCurrent = GetTickCount ();如果((dwCurrent - dwStart) >超时){返回虚假的;}}返回真正的;}L_VOID CMyClient:: OnConnect (L_INT nError){L_TCHAR szMsg [200] = {0};wsprintf (szMsg文本(“CMyClient:: OnConnect: nError [% d]”),nError);LogMessage (szMsg);}L_VOID CMyClient: OnReceiveAssociateAccept (LDicomAssociate * pPDU){UNREFERENCED_PARAMETER (pPDU);LogMessage(文本(“CMyClient:: OnReceiveAssociateAccept”));SetEvent (m_waitEvent);}L_VOID CMyClient:: OnReceiveCStoreResponse (L_UCHAR nPresentationID, L_UINT16 nMessageID, L_TCHAR * pszClass L_TCHAR * pszInstance L_UINT16 nStatus){如果(pszClass = = NULL){pszClass =文本(”“);}LogMessage(文本(“CMyClient:: OnReceiveCStoreResponse”));LogMessage(文本(“\ t nPresentationID”),nPresentationID);LogMessage(文本(“\ t nMessageID”),nMessageID);LogMessage(文本(“\ t pszClass”),pszClass);LogMessage(文本(“\ t pszInstance”),pszInstance);开关(nStatus){情况下COMMAND_STATUS_WARNING:LogMessage(文本(“\ t nStatus: COMMAND_STATUS_WARNING”));打破;情况下COMMAND_STATUS_PENDING_WARNING:LogMessage(文本(“\ t nStatus: COMMAND_STATUS_PENDING_WARNING”));打破;情况下COMMAND_STATUS_PENDING:LogMessage(文本(“\ t nStatus: COMMAND_STATUS_PENDING”));打破;情况下COMMAND_STATUS_SUCCESS:LogMessage(文本(“\ t nStatus: COMMAND_STATUS_SUCCESS”));SetEvent (m_waitEvent);打破;情况下COMMAND_STATUS_REFUSED_OUT_OF_RESOURCES:{LogMessage(文本(“\ t nStatus: COMMAND_STATUS_REFUSED_OUT_OF_RESOURCES”));/ /获取额外的额外元素命令集LDicomDS *电脑= GetCommandSet ();如果(电脑! = NULL){pDICOMELEMENT pElement = pc - > FindFirstElement (NULL, TAG_ERROR_COMMENT,真实);如果(pElement ! = NULL){L_TCHAR * pszErrorComment = pc - > GetStringValue (pElement 0 1);LogMessage(文本(“\ t ErrorComment:“),pszErrorComment);}}}SetEvent (m_waitEvent);打破;}SetEvent (m_waitEvent);}L_VOID CMyClient: OnReceiveReleaseResponse (){LogMessage(文本(“CMyClient:: OnReceiveReleaseResponse”));SetEvent (m_waitEvent);}L_BOOL CMyClient:等待(DWORD超时){L_BOOL bRet = MessageLoop (m_waitEvent,超时);返回bRet;}/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /服务器连接类/ // /当一个客户端连接,CMyServer CMyServerConnection类的创建一个新的实例/ /并接受连接。/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *CMyServerConnection:公共LDicomNet{公共:CMyServerConnection (L_INT32 nMode): LDicomNet (NULL, nMode){}~ CMyServerConnection (无效){}/ /服务器L_VOID OnReceiveAssociateRequest (LDicomAssociate * pPDU);L_VOID OnReceiveCStoreRequest (L_UCHAR nPresentationID, L_UINT16 nMessageID, L_TCHAR * pszClass L_TCHAR * pszInstance L_UINT16 nPriority, L_TCHAR * pszMoveAE L_UINT16 nMoveMessageID, LDicomDS * pDS);L_VOID OnReceiveReleaseRequest ();L_VOID OnBeforeSendCommandSet (LDicomDS * pc);};#定义SIZEINWORD (p)运算符(p) /运算符(L_TCHAR)L_VOID CMyServerConnection: OnReceiveAssociateRequest (LDicomAssociate * pPDU){LogMessage(文本(“\ tCMyServerConnection:: OnReceiveAssociateRequest”));LDicomAssociate DicomAssociate(假);L_TCHAR clientAE [20] = {0};pPDU - > GetCalling (clientAE 20);/ /复制从收到表示对象/ /答复,我们只支持第一个收到hPDU转移语法L_TCHAR szTransfer (PDU_MAX_UID_SIZE + 1) = {0};L_TCHAR szAbstract (PDU_MAX_UID_SIZE + 1) = {0};L_INT iPresentationCount = pPDU - > GetPresentationCount ();(L_UCHAR我= 0;我< iPresentationCount;我+ +){= pPDU L_UCHAR国家免疫日- > GetPresentation(我);,pPDU - > GetTransfer(国家免疫日0,szTransfer, PDU_MAX_UID_SIZE + 1);L_UCHAR nResult = PDU_ACCEPT_RESULT_SUCCESS;,pPDU - > GetAbstract(国家免疫日szAbstract, PDU_MAX_UID_SIZE + 1);DicomAssociate。,AddPresentation(国家免疫日nResult szAbstract);DicomAssociate。,AddTransfer(国家免疫日szTransfer);}LogMessage(文本(“\ tCMyServerConnection:: SendAssociateAccept”));SendAssociateAccept (&DicomAssociate);}L_VOID CMyServerConnection:: OnReceiveCStoreRequest (L_UCHAR nPresentationID, L_UINT16 nMessageID, L_TCHAR * pszClass L_TCHAR * pszInstance L_UINT16 nPriority, L_TCHAR * pszMoveAE L_UINT16 nMoveMessageID, LDicomDS * pDS){UNREFERENCED_PARAMETER (pDS);UNREFERENCED_PARAMETER (pszMoveAE);LogMessage(文本(“\ tCMyServerConnection:: OnReceiveCStoreRequest”));LogMessage(文本(“\ t nMoveMessageID”),nMoveMessageID);LogMessage(文本(“\ t nPriority”),nPriority);/ /……/ /……做这里的商店/ /……nStatus =存储的状态LogMessage(文本(“\ \ t做这里的商店”));/ /发送C-Store-RSPLogMessage(文本(“\ tCMyServerConnection:: SendCStoreResponse”));SendCStoreResponse (nPresentationID、nMessageID pszClass、pszInstance COMMAND_STATUS_SUCCESS);}L_VOID CMyServerConnection: OnBeforeSendCommandSet (LDicomDS *个人电脑){/ /命令添加任何额外的元素/ /对于这个示例,存储请求将失败的状态“拒绝了:资源”/ /在TAG_ERROR_COMMENT的原因如果(电脑! = NULL){pDICOMELEMENT pElement =零;pElement = pc - > FindFirstElement (NULL, TAG_STATUS,真实);如果(pElement ! = NULL){L_UINT16 nStatus = COMMAND_STATUS_REFUSED_OUT_OF_RESOURCES;pc - > SetShortValue (pElement (L_INT16 *) &nStatus 1);}pElement = pc - > InsertElement (NULL,假,TAG_ERROR_COMMENT VR_LO,假的,0);如果(pElement ! = NULL){L_TCHAR szErrorComment[] =文本(“磁盘空间”);pc - > SetStringValue (pElement szErrorComment 1);}}}L_VOID CMyServerConnection: OnReceiveReleaseRequest (){LogMessage(文本(“\ tCMyServerConnection:: OnReceiveReleaseRequest”));LogMessage(文本(“\ tCMyServerConnection:: SendReleaseResponse”));SendReleaseResponse ();}/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /服务器类/ // /监听连接/ /客户端连接时,这个类创建一个CMyServerConnection并接受连接/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *CMyServer:公共LDicomNet{公共:CMyServer (L_INT32 nMode): LDicomNet (NULL, nMode){m_pServerConnection =零;}~ CMyServer (无效){如果(m_pServerConnection ! = NULL){删除m_pServerConnection;}}L_VOID OnAccept (L_INT nError);L_VOID OnClose (L_INT nError, LDicomNet * pServerConnection);CMyServerConnection * m_pServerConnection;};L_VOID CMyServer:: OnAccept (L_INT nError){LogMessage(文本(“\ tCMyServer:: OnAccept”));如果(nError ! = DICOM_SUCCESS){返回;}如果(m_pServerConnection ! = NULL){删除m_pServerConnection;m_pServerConnection =零;}m_pServerConnection =CMyServerConnection (DICOM_SECURE_NONE);如果(m_pServerConnection = = NULL){返回;}/ / m_pServerConnection - > EnableOptimizedSend(真正的);nError = LDicomNet:接受(m_pServerConnection);如果(nError ! = DICOM_SUCCESS){删除m_pServerConnection;返回;}}L_VOID CMyServer:: OnClose (L_INT nError, LDicomNet * pServerConnection){UNREFERENCED_PARAMETER (nError);LogMessage(文本(“\ tCMyServer:: OnClose”));如果(m_pServerConnection = = pServerConnection){m_pServerConnection =零;}删除(CMyServerConnection *) pServerConnection;}/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /样本从这里开始/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#定义WaitForProcessing () \{\如果(! client.Wait ()) \{\LogMessage(文本(“超时:client.Connect”));\nRet = DICOM_ERROR_NET_TIME_OUT;\转到清理;\}\}L_INT LDicomNet_OnBeforeSendCommandSetExample (){LogMessage(文本(“\ n \ n * * * OnBeforeSendCommandSetExample * * *”));L_TCHAR * pszServerAddress =文本(“127.0.0.1”);L_UINT uServerPort = 504;L_INT nRet = DICOM_SUCCESS;/ /加载客户端将存储的DICOM数据集LDicomDS ds;/ / ds.LoadDS (MAKE_IMAGE_PATH(文本(“IMAGE1.dcm”))、DS_LOAD_CLOSE);ds.LoadDS(文本(“d: \ \ \ \ image3.dcm图像”)),DS_LOAD_CLOSE);L_TCHAR * pszStorageClass =零;pDICOMELEMENT pElement = ds。FindFirstElement (NULL, TAG_MEDIA_STORAGE_SOP_CLASS_UID,真实);如果(pElement ! = NULL){pszStorageClass = ds。GetStringValue (pElement 0 1);}如果(pszStorageClass = = NULL | | _tcslen (pszStorageClass) = = 0){pElement = ds。FindFirstElement (NULL, TAG_SOP_CLASS_UID,真实);如果(pElement ! = NULL){pszStorageClass = ds。GetStringValue (pElement 0 1);}}如果(pszStorageClass = = NULL | | _tcslen (pszStorageClass) = = 0){pszStorageClass = UID_CT_IMAGE_STORAGE;/ /默认CT图像存储}/ // /得到图像传输语法/ /L_TCHAR * pszTransferSyntax =零;L_TCHAR * pszStorageInstance =零;pElement = ds。FindFirstElement (NULL, TAG_TRANSFER_SYNTAX_UID,真实);如果(pElement ! = NULL){pszTransferSyntax = ds。GetStringValue (pElement 0 1);}pElement = ds。FindFirstElement (NULL, TAG_SOP_INSTANCE_UID,真实);如果(pElement ! = NULL){pszStorageInstance = ds。GetStringValue (pElement 0 1);}LDicomNet:启动();CMyClient客户机(DICOM_SECURE_NONE);CMyServer服务器(DICOM_SECURE_NONE);LogMessage(文本(“\ tCMyServer:听”));nRet =服务器。听(pszServerAddress uServerPort 5);LogMessage(文本(“CMyClient:连接”));客户端。连接(NULL, 0, pszServerAddress uServerPort);如果(! client.Wait (2000)){如果(! client.IsConnected ()){LogMessage(文本(“超时:client.Connect”));nRet = DICOM_ERROR_NET_TIME_OUT;转到清理;}}如果(nRet = = DICOM_SUCCESS){/ /创建关联类的请求LDicomAssociate dicomAssociateRequest(真正的);dicomAssociateRequest.SetCalled(文本(“L20_PACS_SCP32”));dicomAssociateRequest.SetCalling(文本(“LEAD_CLIENT”));dicomAssociateRequest。SetImplementClass(真的,文本(“1.2.840.114257.1”));dicomAssociateRequest。SetImplementVersion(真的,文本(“1”));dicomAssociateRequest。SetMaxLength(真的,0 x100000);dicomAssociateRequest。AddPresentation (1 0 UID_VERIFICATION_CLASS);dicomAssociateRequest。UID_IMPLICIT_VR_LITTLE_ENDIAN AddTransfer(1日);dicomAssociateRequest。AddPresentation (3 0 pszStorageClass);dicomAssociateRequest。UID_IMPLICIT_VR_LITTLE_ENDIAN AddTransfer (3);/ /发送A-Associate-RQ消息LogMessage(文本(“CMyClient:: SendAssociateRequest”));nRet = client.SendAssociateRequest (&dicomAssociateRequest);如果(! client.Wait (5000)){LogMessage(文本(“超时:client.Connect”));nRet = DICOM_ERROR_NET_TIME_OUT;转到清理;}}如果(nRet = = DICOM_SUCCESS){L_UCHAR nPresentationID = client.GetAssociate () - > FindAbstract (pszStorageClass);L_UINT16 uUniqueID = 99;LogMessage(文本(“CMyClient:: SendCStoreRequest”));客户端。发送CStoreRequest(nPresentationID, uUniqueID, pszStorageClass, pszStorageInstance, COMMAND_PRIORITY_MEDIUM, TEXT(“没有”),1 ds);WaitForProcessing ();}LogMessage(文本(“CMyClient:: SendReleaseRequest”));client.SendReleaseRequest ();WaitForProcessing ();清理:LogMessage(文本(“CMyClient:接近”));client.Close ();client.Wait (1000);LogMessage(文本(“\ tCMyServer:接近”));server.Close ();LDicomNet:关闭();返回nRet;}}/ /

LEADTOOLS DICOM c++类库的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。