blob: 48fcd21035886d5ccce41f868cffc3aad792cd85 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <lib/base/message.h>
#include <unistd.h>
#include <lib/base/eerror.h>
eMessagePump::eMessagePump(int mt): content(1024*1024), ismt(mt)
{
pipe(fd);
}
eMessagePump::~eMessagePump()
{
if (ismt)
content.lock(); // blocks until all messages are processed.
close(fd[0]);
close(fd[1]);
}
int eMessagePump::send(const void *data, int len)
{
int wr = ::write(fd[1], data, len);
if (ismt && wr > 0)
content.lock(wr);
return wr<0;
}
int eMessagePump::recv(void *data, int len)
{
unsigned char*dst=(unsigned char*)data;
int recv=::read(fd[0], dst, len);
if (recv > 0 && ismt)
content.unlock(recv);
return recv;
}
int eMessagePump::getInputFD() const
{
return fd[1];
}
int eMessagePump::getOutputFD() const
{
return fd[0];
}
|