[Clug-tech] JavaScript objects and inheritance

Shawn sgrover at open2space.com
Wed Sep 3 11:49:12 PDT 2008


Sounds to me like you are looking for JSON.

JSON is just a string representation of an object.

So, using your generic Java Message you might send the following string:

{ "msg_version": "value1", "msg_userid": "value2", "msg_session": "value3", "msg_class": "value4", "msg_type": "value5" }

This "object" would be the myMessage object.  Of course that can be extended 
as needed.  You can pass arrays, objects, or even methods this way.  That 
string is simple javascript so can be converted back to an object 
quickly/easily.  There are safe and unsafe ways of doing this, at one extreme 
is just using an eval statement

var myMessage = eval(json_string);

This isn't considered "safe" as it can easily introduce script injection 
issues.  But it does work fine, and is suitable if the json_string is from a 
trusted source.  There are other/safer methods - a little googling for JSON 
will lead you to them.  (don't know them off the top of my head - I usually 
just use the jQuery library for this)

So, for your specific problem, you might have something on the client side 
that looks like this:

function dataArrives(data_string) {
  var myMessage = eval(dataString);
  switch (myMessage.msg_type) {
    case "login":  doLogin(myMessage.login_name, myMessage.password); break;
    //etc.
  }
}

As for "extending" the core object when needed, that is a simple case of 
setting or adding other properties when needed.  In JS there is nothing 
special needed here.

var myMessage = standardMessageObject;
myMessage.johnsName = "John";

Converting your object to string can also be done via code:

function toJson(target) {
  var out = "{";
  for (p in target) {
    out += "\"" + p + "\": \"" + target[p] + "\", ";
  }
  out += "}";
  return out;
}

There are more robust functions available for this on the web.  That is just 
off the top of my head.

This is totally client side.  Most server side languages have a method for 
converting an existing object to a JSON string, and/or creating an object 
from a JSON string.  And because it is simple string manipulation, processing 
overhead is very minimal - depending on the complexity/volume of your data.

Oh, Actionscript is just a variant of ECMAScript (aka JavaScript).  So all 
this should work just fine in flash, or in the browser.

here's some links to help get you started.

http://www.json.org/
http://www.google.ca/search?q=json&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a

HTH  (and hope I haven't completely missed your need here..)

Shawn


On Wednesday 03 September 2008 11:12:36 John Jardine wrote:
> I was wondering if there is an easy way to this...
> I am sending messages between a server and a flash file running in a
> browser.
>
> The browser is using a Java applet to send/receive the data because it's
> UDP based.  The messages all start out the same (header info) but differ
> 16 bytes in, based on the type of data they'll carry. I'd like to be
> able to do it via a somewhat generic object.
>
> So to summarize the current data flow:
> Internet UDP packets <=> Java <=> JavaScript <=> ActionScript
>
> In a perfect world I'd like to have ActionScript send/rcv UDP
> packets ... but it's not a perfect world.  This has led me to the
> current method.  Now I'm trying to make the client message handling more
> generic and a little less fragile.
>
> What I'd like to end up with is a generic Java message:
> public class myMessage {
> public int msg_version;
> public int msg_userid;
> public int msg_session;
> public int msg_class;
> public int msg_type;
> .
> .
> .
> Then extend this generic class with more specific message types:
> public class myLoginMessage extends myMessage {
> public int msg_version;
> public int msg_userid;
> public int msg_session;
> public int msg_class;
> public int msg_type;
> public String login_name;
> public String password;
> .
> .
> .
>
> Then as these message types arrive, I have Java call JavaScript which
> retrieves the message and passes it on to ActionScript.
>
> Is there a way to do this or am I stuck creating different objects for
> each message type?
>
> Any insight's would be welcome.  I already have something working - I
> just don't like it and am looking for something better.
>
> Another thing... the whole communications design is to off-load the
> server as much as possible.  I don't care how hard or convoluted the
> client side gets as long as I can keep my server side ridiculously
> simple (and blazingly fast).
>
>
> _______________________________________________
> clug-tech mailing list
> clug-tech at clug.ca
> http://clug.ca/mailman/listinfo/clug-tech_clug.ca





More information about the clug-tech mailing list