Guest User

Untitled

a guest
Jan 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. #include "Pipe.h"
  2.  
  3. Pipe::~Pipe()
  4. {
  5. loopstop = true;
  6. DisconnectNamedPipe(hPipe);
  7. CloseHandle(hPipe);
  8. }
  9.  
  10. Pipe::Pipe(wstring str_Pipe_Name,void* ReadProc)
  11. {
  12. ReadThisPipe = ReadProc;
  13. hPipe = CreateNamedPipe(str_Pipe_Name.c_str(),PIPE_ACCESS_DUPLEX,
  14. PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
  15. PIPE_UNLIMITED_INSTANCES,BUFSIZE,BUFSIZE,0,0);
  16.  
  17. startread = false;
  18. loopstop = false;
  19.  
  20. while(hPipe == INVALID_HANDLE_VALUE)
  21. {
  22. Sleep(1000);
  23. }
  24.  
  25. ConnectNamedPipe(hPipe, NULL);
  26.  
  27. startread = true;
  28.  
  29. for(;;)
  30. {
  31.  
  32. if( ConnectNamedPipe(hPipe, NULL)==0)
  33. if(GetLastError()==ERROR_NO_DATA)
  34. {
  35. DisconnectNamedPipe(hPipe);
  36. ConnectNamedPipe(hPipe, NULL);
  37. }
  38. Sleep(1000);
  39. }
  40. }
  41.  
  42. bool Pipe::SendToPipe(BYTE bID,BYTE bSetting,BYTE b3,BYTE b4,BYTE b5)
  43. {
  44. DWORD dwcbWritten;
  45. BYTE cbData[5];
  46.  
  47. cbData[0] = bID;
  48. cbData[1] = bSetting;
  49. cbData[2] = b3;
  50. cbData[3] = b4;
  51. cbData[4] = b5;
  52. return (bool)WriteFile(hPipe, (LPCVOID)cbData, sizeof(cbData), &dwcbWritten, NULL);
  53. }
  54.  
  55. bool Pipe::byteToBool(byte b)
  56. {
  57. return (b == 0 ? false : true);
  58. }
  59.  
  60. void Pipe::StartReading()
  61. {
  62. DWORD ThreadID;
  63. CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)&ReadThisPipe,0, 0, &ThreadID);
  64. }
  65.  
  66. void GetAnswerToRequest(__in char* szRequest)
  67. {
  68. }
  69.  
  70. DWORD ReadClient(Pipe* cPipe)
  71. {
  72. char chRequest[4096];
  73. char chReply[4096];
  74. DWORD cbBytesRead, cbReplyBytes, cbWritten;
  75. while(!cPipe->loopstop)
  76. {
  77. if(cPipe->startread)
  78. {
  79. while(ReadFile(cPipe->hPipe, chRequest, BUFSIZE, &cbBytesRead, NULL) >0)
  80. {
  81. GetAnswerToRequest(chRequest);
  82. Sleep(20);
  83. }
  84. Sleep(100);
  85.  
  86. cPipe->SendToPipe(0,0,0,0,0);
  87. }
  88. else
  89. Sleep(500);
  90. }
  91. return 0;
  92. }
Add Comment
Please, Sign In to add comment