[Info-vax] The smoking gun

Richard Maher maher_rjSPAMLESS at hotmail.com
Thu Jun 23 08:20:36 EDT 2016


On 17-Jun-16 4:56 PM, Richard Maher wrote:
> For those of you who've been following on along at home all these years,
> and may have a passing interest in what I was talking about, you can
> find the source-code for my Applet at
> https://drive.google.com/folderview?id=0B7Rmd3Rn8_hDY0RkbWwtVV9DdDg&usp=sharing
>
>
> For those of you who are new, my Applet facilitated the following
> UA/Browser<->Application Server functionality: -
>
> - Single-Signon without session-hijackable cookie bollocks?
>
> - Single, persistent network connection across multiple active tabs in a
>
> browser instance?
>
> - Full-on synchronous of asynchronous I/O capability?
>
> - 1:M relationship between messages sent to received?
>
> - Retention of server-affinity if/when needed?
>
> - Run-time discovery of Application Servers
>
> - Takes up 0px by 0px GUI real estate
>
> - Dependency injection on the Handshake/authentication logic
>
> - and much much more . . .
>
> Anyway, I may be the last person on the planet to admit Applets are dead
> but I'm sure I'm not the only one who shed a tear at their passing.
>
> For the Javascript people this is how Tier3Client was instantiated: -
>
>       try {
>         t3Client = new Tier3Client(
>                        "Demo", "http://192.168.1.159/Applets/",
>                        2048, 1022, kickOff, epicFail, "ISO-8859-1", "N",
> Tier3Client.GUIAWT,
>                        null,Tier3Client.WARNING);
>       } catch (err){
>             alert((err.description||err.message));
>         throw err;
>       }
>
> This example can be found in Randomator.html and the object code can be
> found in Tier3Client.js.
>
> Cheers Richard Maher
>
> PS. If anyone knows a half decent lawyer who operates on contingency
> fees please send him my way. HTTP/2 has a lot more than persistent,
> multiplexed, TCP/IP connections but I can tell you that that the
> similarity of algorithms involved is far greater and more substantial
> than the first few bars of "Stairway to Heaven"!
>
> http://www.bbc.com/news/world-us-canada-36546726


The chronology of opportunity
=============================

* BTW I don't claim that they copied my PUSH example 'cos their effort 
is crap :-(


Exhibit A
----------

https://www.chromium.org/spdy/spdy-protocol

Draft 1
Originally published Nov 11, 2009.

Exhibit B
---------

Then try: -
https://www.w3.org/Search/Mail/Public/search?type-index=public-whatwg-archive&index-type=t&keywords=richard%27s&search=Search

and it will reveal my posts to WHATWG Sep thru Nov 2008. If you look at 
some of the names of Google employees participating in those threads I 
think you'll agree who's more than likely in the Library holding the 
Candle-Stick, dagger, and revolver: -

https://lists.w3.org/Archives/Public/public-whatwg-archive/2008Sep/0090.html

 > > > A copy of the Java Applet code is
 > > at: - http://manson.vistech.net/t3$examples/


https://lists.w3.org/Archives/Public/public-whatwg-archive/2008Sep/0094.html

Please see the following for examples of what I am talking about: -

http://manson.vistech.net/t3$examples/demo_client_flex.html
http://manson.vistech.net/t3$examples/demo_client_web.html

In both cases the Username is TIER3_DEMO and the password is QUEUE.

Obviously, you can "view source" for the HTML and Javascript and the Java
Applet and MXML source can be found at
http://manson.vistech.net/t3$examples/


https://lists.w3.org/Archives/Public/public-whatwg-archive/2008Sep/0156.html

Hi David,

Sorry, forgot to mention a UDP Socket "push" technology demo, that I'd also
like to be able to achieve with WebSockets rather than Java Applet Sockets.
Please explain how the functionality employed in the following code could
ever be achieved with the proposed WebSockets: -

Tier3Pager.java
===========

/**
   * Copyight Tier3 Software. All rights reserved.
   *
   * Author: Richard Maher
   *
**/

import java.applet.Applet;
import java.awt.*;
import java.net.*;
import java.io.IOException;
import netscape.javascript.JSObject;
import netscape.javascript.JSException;

public class Tier3Pager extends Applet
{
     private        String         hostName;
     private        JSObject       browser;
     private static MessageThread  socketThread;
     private static Tier3Talk      chat;

     public class MessageThread extends Thread
     {
         private    DatagramSocket socket;
         private    DatagramPacket packet;
         private    String         threadData;

         public MessageThread(String name, String txt) throws Exception
         {
             super(name);

             byte[] buffer;
             threadData = txt;

             String port     = getParameter("PORT");
             String maxBuf   = getParameter("MAXBUF");
             try
                 {
                 if (port == null)
                     socket = new DatagramSocket();
                 else
                     socket = new DatagramSocket(Integer.parseInt(port));

                 if (maxBuf == null)
                     buffer = new byte[512];
                 else
                     buffer = new byte[Integer.parseInt(maxBuf)];

                 packet = new DatagramPacket(buffer, buffer.length);
                 }
             catch (Exception e)
                 {
                 e.printStackTrace();
                 System.out.println("Unable to create UDP Socket");
                 throw new Exception("Message thread could not be created");
                 }

             setDaemon(true);
             start();
         }

         public void shutdown()
         {
             socket.close();
         }

         public int getLocalPort()
         {
             return socket.getLocalPort();
         }

         public void run()
         {
             System.out.println("Started Message thread. ThreadData = " +
threadData);
             String args[] = {"Started Message Thread " + threadData};
             browser.call("alert", args);
             boolean stopThread = false;

         readLoop:
             while (!stopThread)
             {
               try
                   {
                   socket.receive(packet);
                   String received = new String(packet.getData(), 0,
packet.getLength());
                   processMessage(received);
                   }
               catch (SocketException e)
                   {
                   System.out.println("Shutting up shop");
                   stopThread = true;
                   continue readLoop;
                   }
               catch (IOException e)
                   {
                   e.printStackTrace();
                   System.out.println("Unable to retrieve UDP message");
                   }
             }

             System.out.println("Thread run() unit terminating");
         }

         public void processMessage(String msgText)
         {
              int msgType = Integer.parseInt(msgText.substring(0,2));
              switch (msgType){
                case    1:
                              chat.append(msgText.substring(2));
                              break;
                case    2:
                              String args[] = {msgText.substring(2)};
                              try {browser.call("priceUpdate", args);}
                              catch (JSException e)
                              {
                                System.out.println("Error when calling JS
priceUpdate()");
                              }
                              break;
                default:
                              System.out.println("Unknown rec type
"+msgText);
              }
         }
     }

     public void init()
     {
         System.out.println("Initializing. . .");
         hostName = getCodeBase().getHost();

         chat = new Tier3Talk("Tier3 Messages");
         requestFocus();

         browser = JSObject.getWindow(this);

         if (socketThread == null)
         {
           try
               {
               socketThread = new MessageThread("MsgDaemon", "SomeData");
               }
           catch (Exception e)
               {
               e.printStackTrace();
               System.out.println("Could not init Tier3Pager");
               }
         }
     }

     public void alert(String alertText)
     {
         String args[] = {alertText};
         browser.call("alert", args);
     }

     public void destroy()
     {
         if (chat != null)
             chat.dispose();

         boolean stillDying;

         if (socketThread != null){
             socketThread.shutdown();
             do
             {
                 stillDying = false;
                 System.out.println("Joining MessageThread");
                 try {socketThread.join();}
                 catch (InterruptedException e){
                     System.out.println("Interrupted Join");
                     stillDying = true;
                 }
             } while (stillDying);

             socketThread = null;
         }

         System.out.println("Tier3Pager Applet Rundown complete");
         super.destroy();
     }
}

Tier3Talk.java
===========

/**
   * Copyright Tier3 Software. All rights reserved.
   *
   * Author: Richard Maher
   *
**/

import java.awt.*;
import java.awt.event.*;

public class Tier3Talk  extends Frame
                         implements WindowStateListener
{
     TextArea chatPanel  = new TextArea("Server messages will appear
below: -", 10, 50);
     Toolkit  toolkit    = Toolkit.getDefaultToolkit();
     boolean  windowDown = true;

     public Tier3Talk(String heading)
     {
         super(heading);
         setBackground(Color.gray);

         chatPanel.setEditable(false);

         Panel panel = new Panel();
         panel.setLayout(new FlowLayout(FlowLayout.CENTER));
         panel.add(chatPanel);
         add("Center", panel);

         Dimension screenDim = toolkit.getScreenSize();
         pack();
         Dimension windowDim = getSize();
         setLocation((screenDim.width - windowDim.width),(screenDim.height -
windowDim.height));

         setResizable(false);
         addWindowStateListener(this);
         setExtendedState(Frame.ICONIFIED);
         setVisible(true);
     }

     public void append(String newMsg)
     {
         chatPanel.append("\n" + newMsg);
         if (windowDown)
             setExtendedState(Frame.NORMAL);
         toolkit.beep();
     }

     public void windowStateChanged(WindowEvent we)
     {
         switch (we.getNewState())
         {
             case Frame.ICONIFIED:
                 windowDown = true;
                 break;
             case Frame.NORMAL:
                 windowDown = false;
                 break;
             default:
                 System.out.println("Event of no interest" +
we.getNewState());
         }
     }
}



More information about the Info-vax mailing list