| |
11 |
11 |
|
| |
12 |
12 |
|
| |
13 |
13 |
|
| |
14 |
14 |
|
| |
15 |
15 |
|
| |
16 |
16 |
|
| |
17 |
17 |
|
| |
18 |
18 |
|
| |
19 |
19 |
#include "stdafx.h" |
| |
20 |
20 |
#include "OverlappedCallbacks.h" |
| |
21 |
21 |
#include "TOverlappedDataBuffer.h" |
| |
22 |
22 |
#include "TOverlappedReaderWriter.h" |
| |
23 |
23 |
|
| |
24 |
24 |
#define STATUS_END_OF_FILE 0xc0000011 |
| |
25 |
25 |
|
| |
26 |
26 |
namespace chcore |
| |
27 |
27 |
{ |
| |
28 |
28 |
VOID CALLBACK OverlappedReadCompleted(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) |
| |
29 |
29 |
{ |
| |
30 |
30 |
TOverlappedDataBuffer* pBuffer = (TOverlappedDataBuffer*)lpOverlapped; |
| |
31 |
|
TOverlappedReaderWriter* pQueue = (TOverlappedReaderWriter*)pBuffer->GetParam(); |
| |
|
31 |
TOverlappedReader* pQueue = (TOverlappedReader*)pBuffer->GetParam(); |
| |
32 |
32 |
|
| |
33 |
33 |
|
| |
34 |
34 |
bool bEof = (dwErrorCode == ERROR_HANDLE_EOF || |
| |
35 |
35 |
pBuffer->GetStatusCode() == STATUS_END_OF_FILE || |
| |
36 |
36 |
(dwErrorCode == ERROR_SUCCESS && dwNumberOfBytesTransfered != pBuffer->GetRequestedDataSize())); |
| |
37 |
37 |
|
| |
38 |
38 |
|
| |
39 |
39 |
if(pBuffer->GetStatusCode() == STATUS_END_OF_FILE) |
| |
40 |
40 |
pBuffer->SetStatusCode(0); |
| |
41 |
41 |
|
| |
42 |
42 |
pBuffer->SetErrorCode(dwErrorCode == ERROR_HANDLE_EOF ? ERROR_SUCCESS : dwErrorCode); |
| |
43 |
43 |
|
| |
44 |
44 |
pBuffer->SetRealDataSize(dwNumberOfBytesTransfered); |
| |
45 |
45 |
pBuffer->SetLastPart(bEof); |
| |
46 |
46 |
|
| |
47 |
47 |
|
| |
48 |
48 |
pBuffer->SetBytesTransferred(dwNumberOfBytesTransfered); |
| |
49 |
49 |
|
| |
50 |
50 |
if (pBuffer->HasError()) |
| |
51 |
51 |
pQueue->AddFailedReadBuffer(pBuffer); |
| |
52 |
52 |
else |
| |
53 |
|
pQueue->AddFinishedReadBuffer(pBuffer); |
| |
|
53 |
pQueue->AddFullBuffer(pBuffer); |
| |
54 |
54 |
} |
| |
55 |
55 |
|
| |
56 |
56 |
VOID CALLBACK OverlappedWriteCompleted(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) |
| |
57 |
57 |
{ |
| |
58 |
58 |
TOverlappedDataBuffer* pBuffer = (TOverlappedDataBuffer*)lpOverlapped; |
| |
59 |
|
TOverlappedReaderWriter* pQueue = (TOverlappedReaderWriter*)pBuffer->GetParam(); |
| |
|
59 |
TOverlappedWriter* pQueue = (TOverlappedWriter*)pBuffer->GetParam(); |
| |
60 |
60 |
|
| |
61 |
61 |
pBuffer->SetErrorCode(dwErrorCode); |
| |
62 |
62 |
pBuffer->SetBytesTransferred(dwNumberOfBytesTransfered); |
| |
63 |
63 |
|
| |
64 |
64 |
if (pBuffer->HasError()) |
| |
65 |
65 |
pQueue->AddFailedWriteBuffer(pBuffer); |
| |
66 |
66 |
else |
| |
67 |
|
pQueue->AddFinishedWriteBuffer(pBuffer); |
| |
|
67 |
pQueue->AddFinishedBuffer(pBuffer); |
| |
68 |
68 |
} |
| |
69 |
69 |
} |