-
Notifications
You must be signed in to change notification settings - Fork 2
/
XDebugPort.xcsm
126 lines (115 loc) · 2.73 KB
/
XDebugPort.xcsm
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//xlang Source, Name:XDebugPort.xcsm
//Date: Thu Sep 12:47:45 2018
class XDebugPipe : Stream{
int debugport;
long readfd;
long writefd;
bool bforServer = false;
Object readlock = new Object();
Object writelock = new Object();
public XDebugPipe(){
readfd = writefd = debugport = 0;
}
public XDebugPipe(bool _bforServer){
readfd = writefd = debugport = 0;
bforServer = _bforServer;
}
public XDebugPipe(int port){
readfd = writefd = 0;
debugport = port;
}
public bool setForServer(bool bf){
if (readfd == 0 && writefd == 0){
bforServer = bf;
return true;
}
return false;
}
public bool prepareForPipe(){
String readport = String.format("XDEBUG_WRITE_%d", debugport);
String writeport = String.format("XDEBUG_READ_%d", debugport);
readfd = _system_.createPipe(bforServer ? writeport : readport, bforServer);
if (readfd != 0){
writefd = _system_.createPipe(bforServer ? readport : writeport, bforServer);
if (writefd == 0){
_system_.closePipe(readfd);
return false;
}else{
return true;
}
}
return false;
}
public bool createstream(){
synchronized(readlock){
synchronized(writelock){
if (readfd != 0 && writefd != 0){
if (_system_.openPipe(writefd, false) == false){
return false;
}
if (_system_.openPipe(readfd, true) == false){
return false;
}
}else{
return false;
}
}
}
return true;
}
public int read(byte[] buffer,int pos, int countOfByte)override{
int rd = -1;
synchronized(readlock){
if (readfd != 0){
rd = _system_.readPipe(readfd, buffer, pos, countOfByte);
}else{
return -1;
}
}
if (rd < 0){
close();
}
return rd;
}
public int write(byte[] buffer, int pos, int countOfByte) override{
int rd = 0;
synchronized(writelock){
if (readfd != 0){
rd = _system_.writePipe(writefd, buffer, pos, countOfByte);
}else{
return -1;
}
}
if (rd < 0){
close();
}
return rd;
}
public final void close() override{
synchronized(readlock)
{
if (readfd != 0){
_system_.closePipe(readfd);
readfd = 0;
}
}
synchronized(writelock)
{
if (writefd != 0){
_system_.closePipe(writefd);
writefd = 0;
}
}
}
public long seek(int ,long)override{
return 0;
}
public long getPosition()override{
return 0;
}
public long length()override{return 0;}
public long available(bool)override{return 0;}
public void finalize(){
close();
}
};