[ls api] t1637 – 프로그램 매매 대이터가 존재하지 않는 경우
t1637을 이용하면 특정 종목의 프로그램 매매 대이터를 한 번에 최고 100 영업일 꺼까지 다운로드할 수 있다.
프로그램 매매가 모든 종목들을 대상으로 이루어지는 건 아니다. 프로그램 매매로 거래가 되지 않은 종목에 대해 위의 트랜잭션으로 리퀘스트를 하면 서버는 널을 보내지 않고 아예 리퀘스트 응답 패킷을 보내지 않는다. 이례적인 방법이다. 비슷한 경우 보통은 빈 대이터를 보내므로 이걸 받아서 처리하면 되는데 위의 경우는 받을 게 없는 상황이다. 따라서 리퀘스트를 하고 응답을 기다리면 애플리캐이션은 멈출 수도 있다. 그럼 어떻게 대처해야 할까?
위의 경우 서버는 리퀘스트 패킷을 보내지 않는 대신 메시지 패킷의 MessageData에 DATA NOT FOUND(PGM)이라는 문자열을 담아 보낸다. 따라서 위의 트랜잭션을 이용할 땐 리퀘스트 응답에 더해 메시지 응답도 처리하는 수고를 더해야 한다.
.네트로 위의 메시지를 처리하는 방법은 아래와 같다. 우선 wparam이 2일 때 메시지가 담겨 있는 거니까 이걸 잡은 뒤에 아래와 같이 마셜링을 한다. MessageData는 IntPtr로 선언되어 있고 내부적으로는 nint로 처리된다. 후자는 나중에 만들어진 건데 IntPtr의 애일리어스다. 서로 같은 거다.
Marshal.PtrToStringAnsi(messagePacket.MessageData)