comparison src/com/five_ten_sg/connectbot/service/Relay.java @ 233:2626bf2a8cea

delay testChanged() by 10ms for async transports
author Carl Byington <carl@five-ten-sg.com>
date Thu, 10 Jul 2014 10:44:09 -0700
parents c9a7f33b53a8
children 766176d84e73
comparison
equal deleted inserted replaced
232:83d633b281cb 233:2626bf2a8cea
109 byteBuffer.limit(0); 109 byteBuffer.limit(0);
110 int bytesToRead; 110 int bytesToRead;
111 int offset; 111 int offset;
112 int charWidth; 112 int charWidth;
113 Timer timer = new Timer("relay.blocker", true); 113 Timer timer = new Timer("relay.blocker", true);
114 TimerTask task = null; 114 TimerTask task = new TimerTask() {
115 public void run() {
116 buffer.testChanged();
117 }
118 };
115 119
116 try { 120 try {
117 while (true) { 121 while (true) {
118 charWidth = bridge.charWidth; 122 charWidth = bridge.charWidth;
119 bytesToRead = byteBuffer.capacity() - byteBuffer.limit(); 123 bytesToRead = byteBuffer.capacity() - byteBuffer.limit();
120 offset = byteBuffer.arrayOffset() + byteBuffer.limit(); 124 offset = byteBuffer.arrayOffset() + byteBuffer.limit();
121 125
122 if (transport.willBlock()) { 126 if (transport.willBlock()) {
123 task = new TimerTask() {
124 public void run() {
125 buffer.testChanged();
126 }
127 };
128 timer.schedule(task, 10); // 10 ms delay 127 timer.schedule(task, 10); // 10 ms delay
129 } 128 }
130 129
131 bytesRead = transport.read(byteArray, offset, bytesToRead); 130 bytesRead = transport.read(byteArray, offset, bytesToRead);
132 131 task.cancel();
133 if (task != null) {
134 task.cancel();
135 task = null;
136 }
137 132
138 if (bytesRead > 0) { 133 if (bytesRead > 0) {
139 byteBuffer.limit(byteBuffer.limit() + bytesRead); 134 byteBuffer.limit(byteBuffer.limit() + bytesRead);
140 135
141 synchronized (this) { 136 synchronized (this) {