comparison src/com/five_ten_sg/connectbot/service/Relay.java @ 234:766176d84e73

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