[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