6 #include <Raym/Log.h>
\r
7 #include <Raym/Raym.h>
\r
12 static const int TIMEOUT = 1000;
\r
14 FileInputStream::FileInputStream()
\r
16 DebugLog2("FileInputStream::FileInputStream()");
\r
21 FileInputStream::~FileInputStream()
\r
25 DebugLog2("FileInputStream::~FileInputStream()");
\r
28 FileInputStream *FileInputStream::fileInputStream(FileHandle *handle)
\r
30 DebugLog2("FileInputStream::fileInputStream(handle)");
\r
32 FileInputStream *result = new FileInputStream();
\r
33 result->initWithFileHandle(handle)->autorelease();
\r
37 FileInputStream *FileInputStream::initWithFileHandle(FileHandle *handle)
\r
39 DebugLog2("FileInputStream::initWithFileHandle(handle)");
\r
47 bool FileInputStream::available()
\r
49 DebugLog2("FileInputStream::available()");
\r
51 bool result = false;
\r
52 if (_handle->isPipe())
\r
54 DebugLog3("_handle is pipe.");
\r
56 DWORD BytesRead = -1;
\r
57 DWORD TotalBytesAvail = -1;
\r
58 DWORD BytesLeftThisMessage = -1;
\r
59 if (PeekNamedPipe(_handle->handle(), buf, sizeof(buf), &BytesRead, &TotalBytesAvail, &BytesLeftThisMessage))
\r
61 DebugLog3("PeekNamedPipe() success: %d, %d, %d", BytesRead, TotalBytesAvail, BytesLeftThisMessage);
\r
62 result = (TotalBytesAvail > 0);
\r
65 memset(buf, 0x0, sizeof(buf));
\r
66 ReadFile(_handle->handle(), buf, sizeof(buf) - 1, &len, NULL);
\r
67 DebugLog3("kore: %s", buf);
\r
71 DebugLog3("PeekNamedPipe() error: %d", GetLastError());
\r
78 String *FileInputStream::readLine()
\r
80 DebugLog2("FileInputStream::readLine()");
\r
82 String *result = String::string();
\r
83 if (_handle->isPipe())
\r
92 if (!PeekNamedPipe(_handle->handle(), buf, sizeof(buf) - 1, &read, &avail, NULL))
\r
95 DebugLog3("FileInputStream::readLine(): PeekNamedPipe() error.");
\r
103 // データが無い場合:最大 TIMEOUT[ms] まで待つ
\r
104 if (count++ >= TIMEOUT / 10)
\r
106 DebugLog3("FileInputStream::readLine(): timed out.");
\r
117 char *p = strstr(buf, "\r\n");
\r
121 read = (DWORD)(p - buf + 2);
\r
125 if (!ReadFile(_handle->handle(), buf, read, &len, NULL))
\r
128 DebugLog3("FileInputStream::readLine(): ReadFile() error.");
\r
135 p = strstr(buf, "\r\n");
\r
141 result = result->stringByAppendingString(buf);
\r
154 const char *FileInputStream::className()
\r
156 return "FileInputStream";
\r