diff src/com/five_ten_sg/connectbot/transport/AbsTransport.java @ 42:7ac846a07ed4 tn5250

start tn5250 integration
author Carl Byington <carl@five-ten-sg.com>
date Wed, 11 Jun 2014 09:14:31 -0700
parents 139394237973
children 6b0f1ece1d91
line wrap: on
line diff
--- a/src/com/five_ten_sg/connectbot/transport/AbsTransport.java	Tue Jun 10 17:40:09 2014 -0700
+++ b/src/com/five_ten_sg/connectbot/transport/AbsTransport.java	Wed Jun 11 09:14:31 2014 -0700
@@ -41,6 +41,99 @@
     vt320           buffer;
     String          emulation;
 
+    class vt320Default extends vt320 {
+        @Override
+        public void debug(String s) {
+            Log.d(TAG, s);
+        }
+        @Override
+        public void write(byte[] b) {
+            try {
+                if (b != null && transport != null)
+                    if (bridge.monitor != null) bridge.monitor.hostData(b);
+
+                transport.write(b);
+            }
+            catch (IOException e) {
+                Log.e(TAG, "Problem writing outgoing data in vt320() thread", e);
+            }
+        }
+        @Override
+        public void write(int b) {
+            try {
+                if (transport != null)
+                    if (bridge.monitor != null) bridge.monitor.hostData(b);
+
+                transport.write(b);
+            }
+            catch (IOException e) {
+                Log.e(TAG, "Problem writing outgoing data in vt320() thread", e);
+            }
+        }
+        // We don't use telnet sequences.
+        @Override
+        public void sendTelnetCommand(byte cmd) {
+        }
+        // We don't want remote to resize our window.
+        @Override
+        public void setWindowSize(int c, int r) {
+        }
+        // test for changed screen contents
+        @Override
+        public void testChanged() {
+            if (bridge.monitor != null) bridge.monitor.testChanged();
+        }
+        // play beep noise
+        @Override
+        public void beep() {
+            if (bridge.parent.isShown())
+                manager.playBeep();
+            else
+                manager.sendActivityNotification(host);
+        }
+        // bridge.monitor placement of new characters
+        @Override
+        public void putChar(int c, int l, char ch, int attributes) {
+            if (bridge.monitor != null) bridge.monitor.screenChanged(l, c);
+
+            super.putChar(c, l, ch, attributes);
+        }
+        @Override
+        public void insertChar(int c, int l, char ch, int attributes) {
+            if (bridge.monitor != null) bridge.monitor.screenChanged(l, l, c, width - 1);
+
+            super.insertChar(c, l, ch, attributes);
+        }
+        @Override
+        public void insertLine(int l, int n, boolean scrollDown) {
+            if (bridge.monitor != null) {
+                if (scrollDown) bridge.monitor.screenChanged(l, height - 1, 0, width - 1);
+                else            bridge.monitor.screenChanged(0, l, 0, width - 1);
+            }
+
+            super.insertLine(l, n, scrollDown);
+        }
+        @Override
+        public void deleteLine(int l) {
+            if (bridge.monitor != null) bridge.monitor.screenChanged(l, height - 1, 0, width - 1);
+
+            super.deleteLine(l);
+        }
+        @Override
+        public void deleteChar(int c, int l) {
+            if (bridge.monitor != null) bridge.monitor.screenChanged(l, l, c, width - 1);
+
+            super.deleteChar(c, l);
+        }
+        @Override
+        public void setCursorPosition(int c, int l) {
+            if (bridge.monitor != null) bridge.monitor.cursorMove(l, c);
+
+            super.setCursorPosition(c, l);
+        }
+    };
+
+
     public AbsTransport() {}
 
     /**
@@ -144,11 +237,18 @@
         return emulation;
     }
 
-    public void setLinks(TerminalManager manager, TerminalBridge bridge, HostBean host, vt320 buffer, String emulation) {
+    public vt320 getTransportbuffer() {
+        buffer = vt320Default();
+        int scrollback = (host.getWantSession()) ?  manager.getScrollback() : 0;
+        buffer.setBufferSize(scrollback);
+        buffer.setDisplay(bridge);
+        return buffer;
+    }
+
+    public void setLinks(TerminalManager manager, TerminalBridge bridge, HostBean host, String emulation) {
         this.manager   = manager;
         this.bridge    = bridge;
         this.host      = host;
-        this.buffer    = buffer;
         this.emulation = emulation;
     }
 
@@ -288,7 +388,7 @@
      * @return a key listener
      */
     public TerminalKeyListener getTerminalKeyListener() {
-        return new TerminalKeyListener(manager, bridge, buffer,  host.getEncoding());
+        return new TerminalKeyListener(manager, bridge, buffer, host.getEncoding());
     }
 
 }