Title of Invention

A PROCESS FOR A FRAMEWORK ARCHITECTURE FOR CLIENT SYSTEM

Abstract A handheld client framework system provides a server proxy client (509) that services client requests for network accessible information and determines the server that is most appropriate to supply the requested information and sends information requests packets to that server across the Internet and/or internet. Server responses to information requests are received by the server proxy client. The server proxy client separates the response information into the appropriate data components. Data components are sent to the appropriate client. Presentation and logic components are temporarily stored in a one-behind cache on the client (501). A client will continue to use the presentation and logic components already installed or in the one-behind cache to serve the current user request. Any updates sent by the server proxy client (509) and stored in the one-behind cache are retrieved by the client upon subsequent use by the user.
Full Text A PROCESS FOR A FRAMEWORK ARCHITECTURE
FOR CLIENT SYSTEMS
BACKGROUND OF THE INVENTION
TECHNICAL FIELD
The present invention relates to a process for a framework architecture for
clients systems. More particularly, the invention relates to retrieving and
transmitting data available across a network to personal devices using an
adaptable protocol and server proxy client.
DESCRIPTION OF THE PRIOR ART
Personal data devices have become common accessories in today's technology
driven society. When PDAs, text pagers, cell phones, and personal computers
first came into the marketplace, each device had to have its own custom
architecture. The initial systems paved the way for a multitude of communication
and operating system standards.
However, the wide variety of devices have caused problems in the software
industry. Application programmers must port their programs to each device's
operating system and display capabilities. For example, one PDA may have a
160 x 160 pixel black and white display using the Palm OS while another uses a
180 x 240 color display using WinCE.
An application programmer must take into account the limitations of each device
when creating the user interface for his program. Differing graphics capabilities
between devices make it very difficult to achieve the same look and feel of a GUI
across the varied platforms, for example. The application programmer must take
into account that something that is easily displayed on one device may not be
displayed on another or may not look the same between two devices.
CPU speeds also affect application programs. The efficiency of an application
program must be tweaked for each platform in order for the program to be
viable. Users do not want to use slow programs on their personal data devices.
Additionally, personal devices vary greatly in the available memory and whether
the client software is stored in ROM. Small amounts of RAM make it difficult to
manage data. While having a client software stored in ROM makes it difficult, if
not impossible for the normal consumer, to upgrade.
All of these limitations create problems for application programmers.
A consequence of creating many different versions of a program to support
different personal data devices is that it causes huge headaches in terms of
supporting different code bases. Each code version must be debugged,
updated and supported. When a data packet protocol or operating system
changes, then so must the code base for that system.
One example is Microsoft Corporation's .NET framework which attempts to link
together XML Web services in servers and clients. The .NET framework
requires that all servers and clients communicate using XML and transfer
information in XML. The result is a tightly woven network of XML services. This
approach, however, requires that client devices process all aspects of the data
being requested by users and displayed. It also requires application programs
to be provided and supported for each differing platform. Additionally, the
processing demand on the client systems require more powerful processors as
the complexity of application programs increases.
It would be advantageous to provide a handheld client framework system that
provides a client framework that is easily updateable from a host system and
reduces processing demands on client systems. It would further be
advantageous to provide a handheld client framework system that provides a
programming language that is easily supported across multiple client platforms.
SUMMARY OF THE INVENTION
The invention provides a handheld client framework system. The system
provides a client framework that is easily updateable from a host system and
reduces processing demands on client systems. In addition, the invention
provides a programming language that is easily supported across multiple client
platforms.
A preferred embodiment of the invention provides a server proxy client that
services client requests for network accessible information. The server proxy
client determines the server that is most appropriate to supply the requested
information and sends information requests to that server across the Internet
and/or intranet:
Server responses to information requests are received by the server proxy
client The server proxy client separates the response information into the
appropriate data components. Data components are sent to the appropriate
client Presentation and logic components are temporarily stored in a one-behind
cache on the client. Clients verify with the server proxy client that the client is
using the latest version of presentation and togic components for the particular
task at hand. If the client is not using the latest versions, then it requests an
update from the server proxy client. A client will continue to use the presentation
and logic components lhat currently exist in the one-behind cache to service the
current user request. Any updates sent by the server proxy dient and stored in
the one-behind cache are retrieved by the client upon subsequent use by the
user.
The state of the dient is saved by the server proxy client so that the client is not
dropped when a user, for example, changes from a wired connection to a
wireless connection. The user will not have to reauthenticate the client with the
server proxy client and the user's session will continue as if there were no
interruption.
The invention includes a scripting language that gives the client unlimited flexibility
by allowing the host to modify the client's behavior or add new features at any
time. The feature set can be deployed in stages from the server proxy client
after the client has shipped. Client script updates are sent by the server proxy
client to a client.
Accordingly, the present invention provides a process for a framework
architecture for client systems, comprising the steps of: providing a server proxy
client; providing means on said server proxy client for receiving a client
information request from a client system; providing server determination means
on said server proxy client for determining the proper server to service said client
request; sending said client request to said proper server; receiving said proper
server's response to said client request; wherein said server proxy client act's as a
proxy client for said client system, performing the bulk of data processing for said
client system; wherein said server proxy client updates said client system with
data, presentation, and logic components using a universal data format; wherein
said server proxy client separates raw data from presentation aspects of said
response and places said data into said universal data format; sending said data
to said client system; wherein said server proxy client receives presentation and
logic component updates; and wherein said presentation components updates
are for a specific client device type.
Other aspects and advantages of the invention will become apparent from the
following detailed description in combination with the accompanying drawings,
illustrating, by way of example, the principles of the invention.
BRIEF DESCRIPTION OF THE ACCOMPANYING DRAWINGS
Fig. 1 is a block schematic diagram of the invention's server proxy client
communicating with client devices across different communication media according
to the invention;
Fig. 2 is a schematic diagram of a stream object containing a stock price response
according to the invention;
Fig. 3 is a schematic diagram of a button object according to the invention;
Fig. 4 is a block schematic diagram showing the five layers of a preferred
embodiment of the invention according to the invention;
Fig. 5 is a block schematic diagram of an interface perspective of a preferred
embodiment of the invention's client device and server proxy client according to
the invention;
Fig. 6 is an exemplary hierarchical object tree representing the derivation of
objects according to the invention;
Fig. 7 is a schematic diagram of a form object according to the invention;
Fig. 8 is a schematic diagram of a button object according to the invention;
Fig. 9 is a schematic diagram of a form object containing a button object according
to the invention;
Fig. 10 is a schematic diagram of a stream object containing a stock price
response according to the invention;
Fig. 11 is a schematic diagram of a root object according to the invention; and
Fig. 12 is a schematic diagram of a form object containing data and logic objects
according to the invention.
DETAILED DESCRIPTION OF THE INVENTION
The invention is embodied in a handheld client framework system. A system
according to the invention provides a client framework that is easily updateable
from a host system and reduces processing demands on client systems. In
addition, the invention provides a programming language that is easily supported
across multiple client platforms.
The invention provides a scripting language and client engine that gives a host
system the flexibility to dynamically change the behavior and appearance of a
client system. The client engine is easily adaptable to different client architectures
and user interfaces. The host system includes a proxy client that performs the
bulk of the data processing of the data accessed by a client system.
Referring to Fig. 1, the invention provides a host-controllable architecture for
applications to run on portable (and non-portable) devices such as PDAs, text
pagers, cell phones, and personal computers 102, 103, 104. A server proxy
client 101 is also provided that separates the data and presentation aspects of a
session, each of which is sent independently to a client 102, 103, 104, such that
the data are available without the presentation, e.g., for use independent of the
presentation. The client devices 102, 103, 104, can be connected to the server
proxy client 101 through a wired network 105, phone line 106, or
satellite/wireless connection 107.
The server proxy client 101 obtains data for client requests through the Internet
and/or intranet 108. Data are received by the server proxy client 101 and are
processed into the basic data needed by the client before being sent to the
client 102,103,104. The presentation aspects of displaying data are separately
stored on the server proxy client and represent display properties that are
specific to a particular client application. The separation of data and presentation
components allows the client 102, 103, 104, to reuse the data for other display
forms or to reinterpret the data for other applications.
The invention also provides a persistent proxy client {i.e., the proxy client
component of the server proxy client) at the server proxy client 101 that
maintains state for the client 102, 103, 104, which improves availability, for
example, by allowing a user to switch from one transport, such as Ethernet, to
another transport, such as Ricochet, without losing state or having to
reauthenticate the user.
The invention consists of a client framework and a server proxy client 101 as
noted above. The goal of the client framework is to provide maximum flexibility
by having the client's behavior modifiable by the host. This allows rapid addition
of new features to platforms that might not have a feasible means of updating the
client code directly, such as a PDA with its client code burned in.
The invention accomplishes this flexibility by separating the presentation, logic,
and the data components. This enables each component to be updated
independently, thereby reducing network traffic and superfluous requests to the
i server. Additionally, this framework can be leveraged across several platforms
reducing development time and bug counts for new clients by having a common,
optimized, and tested code base.
The server proxy client 101 handles all requests from clients 102, 103, 104, and
returns the responses in a uniform protocol. This greatly simplifies the
responsibility of the client 102, 103, 104, which no longer has to understand
multiple desktop-centric protocols such as HTTP, IMAP, and SMTP. Additional
features are deployed from the server proxy client 101 as they are developed
and received by the client 102,103,104, on demand.
The invention provides a common framework for building host controlled clients
on various platforms such as the Palm OS, WinCE, Linux, Macintosh, and
Windows. Once a device that has the client code burned into ROM has been
released to customers, it is difficult, at best, to update the client. The invention's
framework addresses this issue and several other difficulties involved with
creating clients on portable devices.
The main goal of the framework is to allow the server proxy client to control and
modify the behavior and feature set of the client without having to update the
client code. Also, a common framework can be leveraged by client
development to reduce bug counts and development time by sharing a
common, optimized, and tested code path.
The invention's fundamental architecture separates client data, presentation, and
logic into distinct components using an XML data model. When a client makes a
request to the server proxy client, the response from the server proxy client
comes down as a binary serialized XML data stream that preserves the semantic
information of its contents. This allows the client logic, defined by scripts, to
identify specific components of the response, make modifications, and utilize the
data in any fashion. Additionally, the data sent to the client can be cached
independent of the presentation, which means that it can be reused by other
forms and displayed or reinterpreted in any fashion by the client logic at a later
time.
With respect to Fig. 2, the response to a stock quote request 201 comes back
as a tree of values 202, each tagged with a name. This information 202 can be
used by the logic on the clients to extract only the desired components of the
request for display.
The presentation component of the client is also an XML data stream consisting
of objects and properties. Properties can be simple, such as integers, strings,
and Boolean values, or complex, such as scripts, or binaries that may contain the
pixel data for an image, or rich text of a news story. Objects can be Ul widgets
such as a button, text field, or pop up menu, which have built in integer
properties such as top, left, height and width. Additional built in properties might
include a string for a caption or contents.
A native application can add built-in properties that make sense in view of the
specific platform in order to better utilize native features such as font, size, color,
and style. This flexibility is inherent in the invention's design in its uniform
treatment of data streams.
Referring to Fig. 3, the data model represents these objects and properties 301
as a simple tree 302 that expresses the layout of individual widgets contained in
the current form.
When the user pushes a button on the form, it can activate a script that sends a
request to the server proxy client, such as a stock quote, and has the logic to deal
with the contents of the server proxy client's response to extract the company
name and current price and use those values to populate the text field
properties. However, the pristine form will be cached by the client so future
requests for that service will display the form immediately, but still allow the user
to make interactive requests such as specifying a different symbol for the stock
quote or a different address to obtain a map. These forms or features are not
burned into the client, rather, they are made available to the client by the server
proxy client.
The invention's architecture includes a scripting language, described below, which
supplies the logic component of the client A script appears as just another
property in the form, but it provides the client with intelligent action. When a user
presses a button in a presentation, a script property associated with the button
executes (as described below). A script can perform many tasks, from validating
input on the form, to making a request to the server proxy client, to being
invoked by an object to extract the desired pieces from a response and insert
them into the appropriate places in the presentation. It might also modify
locations of Ul components to adjust for a specific response from the server
proxy client, or it could modify the data in the response to meet the particular
client's display limitations.
The scripting language gives the client unlimited flexibility by allowing the server
proxy client to modify the client's behavior or add new features at any time. The
feature set is no longer a development issue for the client but instead can be
deployed in stages from the server proxy client after the client has shipped.
Another benefit of having active client-side logic manifests itself in the client's
ability to provide much of its functionality without having a connection to the server
proxy client. Hence, the client can still perform during intermittent or lost coverage
and having a server proxy client connection further enriches the user experience
by allowing the user to pick up where he left off during the intermittent or lost
coverage. Lastly, the ability to update the client from the server proxy client
enhances the clients durability and robustness by allowing certain bugs to be
addressed by scripts when updating the client code directly would not be
feasible.
The strength of the invention is that it offers a means of developing clients that can
be modified and updated after their release. This point cannot be understated. It
may appear as if the invention is a presentation package, but that results from the
fact that the invention must compartmentalize the presentation, data, and logic. In
doing so, the functions and features of the client are defined by the invention's
forms made available to the client from the server proxy client. The active logic
on the client allows that feature set to be much richer than simple HTML and yet
tailored to that particular client. Additionally, the internal structure of the invention
means that the developer instantiates only the portions needed and appropriate
for the specific client, producing lightweight and robust clients quickly and
efficiently.
Building a client that utilizes the invention's framework involves two major facets.
First, the system's kernel must be given a means to access certain common
features of the device, which must usually be routed through the operating
system (OS). Secondly, the native implementation of the client must define the
user interface widgets that are available on the device if support for the
presentation layer is desired.
With respect to Fig. 4, the invention's framework is divided into five layers 401.
The presentation layer 402, an object layer containing the invention's Nachos
objects 404 and the system objects 403, an object runtime layer 405, an
abstraction containing a transport abstraction 407 and a storage abstraction 406,
and a bootstrap application layer 408.
The bootstrap application 408 contains a native implementation of the invention's
kernel, and implements the hooks necessary for operation on the device such as
transport and storage. The bootstrap application 408 can install objects into the
runtime to expose services specific to the device. This layer 408 can host
additional functionality not related to the invention or incorporate other features not
yet supported by the invention. Alternatively, it can act as a simple "glue" layer
to handle device specific issues, such as communications, and implement the
bulk of the user experience by deriving classes from the invention's presentation
layer 402.
The invention defines an abstract base class called NachosSystemlnterface. The
client must derive a class from this base class and define all the virtual functions
that provide the glue between the invention's framework and the native OS of
the device. The virtual functions in this class include access to storage functions
that define a rudimentary file system, a means of sending packets to AOL, image
representation for that device, and the current time in UTC. Through these
mechanisms, the invention provides essential functions such as caching and
persistent storage in a database. This storage could be implemented in the form
of RAM, flash memory, or even a hard drive on a desktop client. The invention
makes no assumptions about the implementation that the native code supplies,
only that it behaves in the fashion described in the NachosSytemlnterface base
class. Although the client can function without these, it would make the client much
slower to respond to requests and preferences or other information could not be
saved between sessions.
The second part of developing a native implementation of the invention requires
integration of the user interface (Ul) components. The invention defines a set of
presentation objects 402 that are abstract representations of common Ul widgets
such as buttons, edit and static text fields, images, checkboxes, popup menus,
etc. The native client is not required to implement ail the widgets that the
invention defines, but any widgets that are implemented must be registered with
the runtime object 405 via the registerClass() method. This allows the client the
flexibility to support only the widgets that make sense on that particular device
without hard-coding any mandates into the invention's kernel.
The native code must derive a class from the invention's base class for each
widget it implements and provide a means of displaying that widget. The
invention does not perform any hit testing, drawing, or changes to the native
widget on the screen. Instead, the derived class must handle events such as the
creation and destruction of the system peer, notification that a property of the
widget has changed due to user input, and the ability to notify the base class that
the widget was clicked or selected. The notification of changes and actions that
the invention receives from the derived classes in the native client code provides
the means of receiving events and input on that particular device.
The invention's architecture also specifies a server proxy client to simplify the
responsibilities of the client application by unifying all of the communications with
the client to a single protocol. This reduces the size and complexity of the client
by eliminating the need to parse multiple protocols. It also means that new
protocols can be addressed by making changes to the server proxy client
instead of having to update client code.
The invention has been designed to make it intrinsically robust. No native
operation on the invention's hierarchy can corrupt the client. Similarly, the
invention's virtual machine (VM) will simply abort the current script if it finds any
unexpected data, byte codes, or illegal access. Still, it is difficult, if not impossible
to test all conditions for such a complex environment. There are several compiler
switches which log statistics and debugging information relevant to most aspects
of the invention, including, but not limited to the script compiler, the script runtime
VM, and the Message Center.
The client can optionally maintain a local database accessible through the
invention. This database will act as persistent storage between sessions to
maintain state information, user preferences, and a local cache.
The server proxy client will be the sole point of communication for all clients. Its
architecture must be robust and scalable. The server proxy client will
communicate with any number of other servers on the back end to create the data
streams that it sends to the clients. However, many clients will not have a direct
connection to the server, but instead will communicate over some wireless
network. Both client and server account for such issues as significant latency and
lack of or intermittent coverage.
The server proxy client becomes the central point of maintenance for the
invention. Once the client has been deployed, it is dependent upon the server
proxy client for much of its functionality. Development of content for clients
requires the definition of request and response data stream formats, server
components to handle the individual requests, and forms for device specific
presentation.
The invention addresses many of the constraints that apply to micro clients by
being a lightweight, cross-platform, client framework. The separation of data,
presentation, and logic allow each component to be independently maintained
and modified. The bulk of the client's features move from native client code to the
VM. Because of this, the end user's experience on the client can be enhanced
and modified without updating the client itself.
Referring to Fig. 5, an interface perspective of the invention's client device 501
and server proxy client 509 is shown. Data requests are sent from the client 501
eitherthrough connectivity medium 1 510 to the connectivity 1 gateway module
502, through direct connection 503, or through connectivity medium 2 511 to the
connectivity 2 gateway module 504 to the protocol handler module 505. The
connectivity gateway modules convert from whatever specific protocol is
required for the connectivity medium to an Internet protocol and is then forwarded
to the protocol handler module 505 in the server proxy client 509. The protocol
handler module 505 interprets the request message and either makes requests
of the Proxy System module 506 or if the request is for system content (such as
presentation or logic components), retrieves system content from the content
storage device 507.
The protocol handler module 505 and the Proxy System module 506 in the
server proxy client 509, contain the current state of the client session between
the network hosts module 508 and the client 501. This client session state is
independent of the state of the connectivity between the client 501 and the
protocol handler module 505. The client session state can freely transition
between the connectivity medium 1 510, connectivity medium 2 511, or the
direct connection 503 without requiring re-authentication, so to other users, the
session is uninterrupted.
The Proxy System module 506 manages the multiple connections to the
network hosts module 508. The Proxy System module 506 provides an
application interface that the protocol handler module 505 uses and implements.
The requests for data are correlated with the responses from the Proxy System
module 506 by the protocol handler module 505 and the data is then formatted
in accordance with the invention's protocol, and a response is sent either through
connectivity gateway 1 module 502 through connectivity medium 1 510, through
direct connection 503, or through connectivity gateway 2 module 504 through
connectivity medium 2 511 to the client 501.
Requests for content to the protocol handler module 505 are handled by loading
the content stream from the content storage device 507. The request contains
information about the state of the content cached on the client device 501, if
applicable. If the cached data is current, then a simple response is sent which
causes the client to reset the expiration date of the cached data. If the cached
data is not current, then this data is then formatted in accordance with the
invention's protocol and a response is sent either through connectivity gateway 1
module 502 through connectivity medium 1 510, through direct connection 503,
or through connectivity gateway 2 module 504 through connectivity medium 2
511 to the client 501. before the data is formatted, it is either compiled before
the formatting (on demand) or precompiled and stored on the storage device
507, which option is chosen is dependent upon whether compiling on demand
becomes a bottleneck in the Proxy System module 506.
Content can be updated on the client 501 by the cache spoiling mechanism
described above. A new version of the content is published to the content
storage device 507 and when requests for the content are made by the client
501, the new version is automatically retrieved from the content storage device
507 and sent to the client 501. Content can be a data, presentation, logic, or any
combination of the three. Although the new version is sent to the client 501, the
old version of the presentation and/or logic will be used by the client 501 to
eliminate latency that might be experienced by the end user.
The new version of the presentation and/or logic are placed in a one-behind
cache on the client 501. The next time the user requests the content, the client
501 will check the one-behind cache to see if a version exists for that particular
content. When the client 501 retrieves content from the one-behind cache, it first
checks whether the content has expired. The client 501 will always use the
currently cached version of the presentation and/or logic from the cache. If the
content has expired, the client 501 will check with the Proxy System module 506
to see if a new version is available. If the Proxy System module 506 determines
that the client 501 has the newest version, an acknowledgement will be sent to
the client 501 to reset the expiration date of the cached content. If the Proxy
System module 506 determines that a newer version is available, the new
version of the presentation and/or logic is sent to the client 501 and placed in a
one-behind cache on the client 501. The version request process described
above repeats if a new version is published to the content storage device 507.
The client architecture is designed to be efficient, portable and flexible. It is
intended to allow for a common code base to leverage many different platforms.
Given the design of the invention's kernel, a developer starting on a new client
has much less to do than on a usual client development. The invention's kernel
itself will take care of most logic and functionality of the application. The
developer will mainly just need to focus on two areas: Ul integration and system
"glue".
For the Ul integration, the invention provides a set of presentation objects that
are abstract representations of common Ul widgets. These include such widgets
as button, rectangle, image, checkbox, etc. However, these are logical entities
only. It is up to the client developer to extend these with versions that will hook
into the Ul layer on the target platform.
The presentation objects are based on the concept of utilizing a native peer.
That is, for each NachosButton, the kernel expects that the client developer
provided the code to create a button in the target platform's desired Ul toolkit. It
is also required that the native button will both accept changes from the
NachosButton to the peer and pass user interactions from the peer to the
NachosButton.
A client developer is not required to implement classes for all presentation
objects. Only those necessary to support desired applications on the target
platform must be present. However, developers are encouraged to implement
as many objects as reasonable. Any classes created by the client developer in
the presentation objects should be registered with the runtime's registerClass()
method. This is how the kernel knows to hook into the classes present for a
given version of a client program, and will not try to utilize unsupported objects.
The main ancestor class is NachosUIObject. This provides support for gluing to
a native peer. The two more important methods are _createSystemPeer() and
_destroySystemPeer(). These functions must handle a call properly at any time
(including calls to _destroySystemPeer before _createSystemPeer).
_createSystemPeer() must be sure to get Its initial state from the properties of
the object to which it is attached. The kernel will call these as needed in order to
maintain a presence in the target platform's Ul. In general, any data and state
should be stored in the subclass of the object in order to free the kernel to
destroy and recreate the native peer as needed.
Subclasses of NachosUIObject include NachosForm and NachosWidget. In
Nachos a NachosForm is the main container in which a Ul may be constructed.
NachosWidget is the base class for all widgets such as buttons, images,
rectangles, etc. Non-widget subclasses of NachosUIObject include NachosTimer
and NachosltemsObject.
Each object may have both built-in and run-time properties. Built-in properties
cannot be deleted nor renamed, and are guaranteed to be present in any
instances. Any additional properties of an object will be its children. These could
be Ul objects, data objects or other properties such as scripts, binaries, integers,
booleans, or strings.
With respect to Fig. 6, an exemplary hierarchical object tree 601 representing the
derivation of objects in the invention is shown.
i NachosForm has the following built-in properties:
caption - the string title of the form to display in the caption area
modal - a boolean to tag the form as modal or non-modal
keepWhiteboard - a flag for preserving data on the whiteboard when the
form is loaded
frozen - the Ul should not draw the form while this is true
persistent - this form and its data will be saved even after it is undisplayed
NachosWidget has the following built-in properties:
left - the placement of the left edge of the widget in the Ul
top - the placement of the top edge of the widget in the Ul
width - the width of the widget
height - the height of the widget
visible - true if the widget is currently visible
enabled - true if the widget is 'active' and will respond to user input
Other objects that derive from NachosWidget may have additional built-in
properties. For instance, a button has a caption property that acts as a label the
button, or a rect widget, which as an integer to denote the fill color of the rectangle.
The coordinates for left and top are absolute coordinates in the display area. Any
part of the display that is reserved for the form's caption does not count for
coordinates in the display area. For example, if the form caption area was at the
top of the form, top=0 would place a widget at the first pixel below the form
caption area.
Some Ul toolkits place native widgets in absolute space and some place them
relative to their parents. It is the job of the client developer to ensure that any
needed transformations of coordinates are done between the NachosWidget
and its native peer.
The other important part for a client developer to implement is the code to "glue"
the invention to the target platform. An implementation of
NachosSystemlnterface needs to be provided to the NachosRuntime upon
initialization. The kernel will then use this implementation to perform its interactions
with the target platform. This includes local storage and network access.
If storage is supported on the target platform, an implementation of
NachosDataStreamlnterface should be supplied, plus the additional needed
methods implemented from NachosSystemlnterface.
An exemplary specification of the invention's scripting language is shown below.
Introduction
The invention's client framework provides a host-controlled, intelligent client. The
concept of host controllability offers distinct advantages over a static client. It
allows the rapid addition of new features to clients on platforms that might not
have a feasible means of updating the client code directly, e.g., devices that
have their client code burned in. Also, unexpected problems with the client can
be circumvented or eliminated by modifying the client's behavior from the host.
Additionally, since a client is more than a dumb terminal that simply displays
information from the host, it maintains much of its functionality even when not
connected to the host. This is particularly valuable on clients that have high
latency connections or that need to function well offline.
The invention achieves this flexibility by separating the presentation, logic, and
the data from each other using an XML data model, which enables each
component to be modified or updated by the host independently of each other.
This document will explain some of the fundamental principles of the invention
while focusing on the invention's scripts. In order to use the scripting language
effectively, the scriptwriter will need to understand the data model in terms of the
invention's properties, the presentation component in terms of the invention's
widgets, and lastly the capabilities of the scripting language itself.
Scripting Properties
The fundamental building block of the scripting language is a property. Every
property has a name and a value. The name acts as a label that can be used
when referring to the property. Names of properties can be of arbitrary length
and consist of any printable character. However, names that start with a letter or
underscore and are followed by any series of letters, numbers, or underscores
are the most easily accessed name from the scripting language. The names of
properties are not case sensitive. Examples of property names are:
The value of the property can be one of several types. Simple value types are
integer, string, and Boolean. These are the most commonly used and properties
that will be directly examined or modified from a script

There are more complex properties such as scripts and binaries. In general, the
contents of complex properties cannot be modified from a script, but the
complex property itself can be moved, copied, or deleted. Binary properties
are used for images, large bodies of text, and anywhere you have large "blobs"
of data.
The last kind of property deserves special consideration. It is the object
property.
Objects
An object is unique because it acts as a container for other properties. Like all
properties, an object has a property name, but is also has a "class". The class of
the object designated by the class name defines certain attributes about the
object such as what properties it contains by default and what types of additional
properties that it can contain.
With respect to Fig. 7, an editor tool has been used to create a "form" object 701
named "untitled" 702. When the framework creates a form object 701, it
appends certain built-in properties, which cannot be removed or reordered. A
form will always have a string property named caption 703, and Boolean
properties named modal 704, keepWhiteboard 70S, frozen 706, and persistent
707. Each of these properties governs the characteristics and behavior of the
form such as whether is should maintain its state once it has been displayed (if
persistent 707 is true), or whether it should clear the global area for inter-form
communication (if keepWhiteboard 705 is false). A "form" is one example of an
object class, but many classes exist. Another common class is a "button"
Referring to Fig. 8, all Ul widgets in are actually just objects with certain built-in
properties to control its appearance. The button 801 has a script 802 which will
be called anytime the button object 801 receives an "action" message 803,
described below.
With respect to Fig. 9, a button object 902 created in the form 901 is shown. B y
creating an object inside of another object, the properties can no longer be
expressed as a simple list Instead the form 901 now appears as a hierarchy
where each property is owned by a parent object. The button, myButton 902,
owns the integer property named left 908 and everything below it, while the
form owns the properties named caption 903, modal 904, keepWhiteboard
905, frozen 906, persistent 907, and myButton 902.
The other responsibility of an object besides containment is message handling.
Messages
The unit of communication is a "message" class object. The message has a
source object and a destination object to which it is sent and usually contains
some additional information in an object of class "stream" called parameters. The
parameters object acts as the container for information required for a request or
response. For instance, if a script sends a message requesting a stock quote for
"AOL" the parameters object of the message it sends would have a property
called "sym" with a string value of "aoP.
Referring to Fig. 10, an exemplary response from the server 1001 is shown. In
this case parameters 1002 contains another "data" class object called stream
1003 that holds the stock quote. The script can access each of these properties
individually by name or index.
A message also has an echo object of class "stream", which contains any
properties that were specifically included in the original message that the sender
wants to receive in the reply. This might be used to copy data that generated
the request to the recipient of the reply. For example, in a mail application, a
script might send a "fetchBody" message to the host carrying along the message
ID as an echo, so that when the reply comes back it can associate the response
with the mail without needing a map of ID's to transactions.
Many messages have a corresponding reply message. For instance, a load
message request will return the results in a reply message. Similarly, a save
message sends a notification of completion with a reply message. Most scripts
use blocking calls to wait for the response so the name of the reply isn't generally
needed. However, there are times when the sender might wish to override the
default reply name for asynchronous requests which might require specific reply
names so the appropriate script can process the response. This can be
accomplished by setting the replyName property to the desired message
name. This is used to demultiplex responses coming back to an object much like
the echo parameters are, but in a way that is less general, and often easier to
use.
The Runtime Root
With respect to Fig. 11, in order for a form to be displayed or an object to
receive messages it must by owned by an object known as the runtime 1101.
The runtime is an object of class "roof that serves as the origin of the hierarchy for
all active objects.
The first object of interest is the form stack, forms 1102. When the runtime
displays a "form" object, it takes ownership of the new form by placing it in the
form stack. The form's Ul widgets will be created and displayed (if the Boolean
property, visible, is true). After all the widgets have been created, the runtime
will send the form a "displayed" message so the form can perform any actions
immediately after being displayed. From this point on, the form has the ability to
send and receive messages as long as it is owned by the runtime.
The services object 1103 provides access to a many features that can be
registered at runtime. One service that it provides by default is the database
object 1104, which offers persistent storage. The database can be used to save
preferences, high scores, or other data that should be kept from session to
session like the user's portfolio or address book.
The aol object 1105 under services 1103 acts as the connection to the host.
Messages requesting data from the server will all be sent to the aol object 1105
with the appropriate message name corresponding to the request. For instance,
the stock quote in Fig. 10 was a response to a message named
"getStockQuote" sent to aoA
The trash object 1106 acts as a temporary resting place for deleted properties
and locally created objects. The contents of the trash object 1106 will not be
deleted until all scripts have completed execution because deleted properties
might be referenced by another suspended or blocked script.
The whiteboard object 1107 also acts as temporary storage for communication
between forms, but the lifetime of its contents is governed by a different
mechanism. One of the built-in properties of a form object is a Boolean called
keepWhiteboard. The runtime deletes the contents of the whiteboard object
1007 any time the runtime displays a form that has keepWhiteboard set to false.
This allows data to be passed from form to form as long as the next form is
expecting it. (i.e. keepWhiteboard is true.)
Script Overview
On the client device, the application presents features and services to the user
by using forms. As discussed above, the forms contain Ul widgets, such as text
fields, check boxes, pop-up menus, and buttons. Once the user interacts with a
widget by clicking a button, changing text, or selecting an item in a list, the form
needs to act on that event. It does so by sending a message to the appropriate
widget, but that doesn't accomplish anything in itself. The widget needs to have
a script that corresponds to the message that is being received. For example, a
button receives an "action" message when the user clicks it. If the button widget
has a script property called acton, that script will be executed to handle the
"action" message. Similarly, if that script sent a "load" message to aol to get a
stock quote, then a reply message called "reply" will be sent back to the button
which can handle the response with a script called reply which might display
selected properties from the quote such as the current price.
The scripts are the form's logic component which give the client intelligent
behavior. By creating new forms on the server, the client can get new or
updated functionality simply by loading the form and displaying it. This type of
flexibility shortens the development cycle of the client and increases its longevity
by adding to its feature set after the client has been released.
Script Basics
In order to begin programming Script, the scriptwriter must be familiar with the
conventions of representing data, variables, and expressions. The next few
sections will define the constructs of the language and show simple examples of
how to use them.
Being able to reuse scripts will increase reliability and shorten the time required to
develop new features. However, not all code is written elegantly, so Script
allows you to comment your script using the double slash, as in C++.

There are also C style block comments. The notable difference is that block
comments nest in Script. This is a significant change from C.

Literal values for integers, Booleans, and strings are represented as follows:

The newiine keyword can be used to append a carriage return onto a string
value.

It is also possible to use escape sequences in strings with the back slash
'\' followed by 'n' for new line, f for tab, or 'x" followed by a two digit
hexadecimal value.

The statements in Script are terminated by carriage returns. There are no
semicolons in the language. In fact, the lexer will gag on the first errant punctuation
it runs across. However, if the statement gets too long, it can be continued on the
next line by putting the backslash as the last character on that line.
.homer.profile = "Springfield Nuclear Power Plant safety inspector" &.", bowler"
", beer drinker" & ™, astronaut" // that was just too much for one line to take
That should be enough for starters, but in order to access data we need to know
how to follow a path in the hierarchy to a given property.
Identifiers and Paths
Scripts allow access to values such as strings, integers, and Booleans that can be
stored in properties, which exist in the form, database, or whiteboard.
Alternatively, values can be placed in temporary variables that only exist during
the execution of the script. Temporary variables must begin with a letter or
underscore and can be followed by any sequence of letters, underscores, or
digits.

Path are the means of specifying a location of a property in the hierarchy. The
period is the path separator similar to a slash being the directory separator h
Unix. The basic path components are explicit names, indices, or name
expressions.
Referring to Fig. 12, Barfs age 1204 could be set with the following expression

Each of these expressions set Barfs age property to a value of 10. The first
expression starts with me, which begins the path in the same object that contains
the script. In this case the form object, theSimpsons 1201 contains the script.
Following from there, the form owns the simpsons data object 1202, which owns
Bart 1203 Which Owns age 1204.
The second expression uses a shorthand form of me by beginning the path
expression with a period. The third expression shows that paths are not case-
sensitive. The last path is not relative to the script, but starts with at the top of the
form, thesimpsons 1201.
Now consider the annoy 1205 script in Bart 1203. In order to change a property
in Lisa 1206 relative to Bart 1203 the path needs to move up the hierarchy. It
can do so in the following ways:

Everything is the same as before, but the parent (or "..") path component
causes the path to ascend the hierarchy one level from the current position, or
from the object that contains the script if it appears as the first part of a path.
Another way to access elements of a path is to use the index of the property. In
a path, the square bracket operator is used to reference properties by index.

Another convenient way to access a property is by name using an expression.
This allows the script to operate on different properties at runtime without having
to directly modify the script. Use the parenthesis preceded by a period or the
curly braces to use an expression as a path name. For example, from
Bart.annoy:

Expressions and Operators
The most common operation in Script is computing the value of an expression.
Expressions are written using operators familiar to most programmers and
scriptwriters. The operators "*", "/", "+", and "-", are used for multiplication,
division, addition, and subtraction, respectively. The "=" operator pulls double
duty in the language, acting as both the assignment operator and the equality
operator.


Unlike C and C++, Script is not a strongly typed language. When an integer is
assigned to a string property, Script promotes the integer to a string. If a string
value that represents an integer is assigned to an integer property, the string will
be converted to an integer before the assignment. If a string does not represent
a base ten number, then it will be treated as an integer value of zero. When
converting from Boolean, string values are "True" and "False" and integer values
are 1 and 0. When converting to a Boolean, only the case-insensitive string
value "false" and the integer value 0 will be treated as false. All other values for
strings or integers are true.

If the left hand side of an assignment is a property that doesn't exist, that
property will be created as the apparent type of the expression and assigned
the value of the expression.
or !
The string concatenation operator, "&" is particular to Script, it can be used to
append on string to another.

The logical operators are words, rather than symbols, with the exception of the
logical not, which can be written as either "not" or "!".

The comparison operator "=" will try to convert its operands to integers, but if
both left and right operands are strings, it will perform a case-insensitive compare.
Certain operators may be used in conjunction with the assignment operator to
simplify expressions.

Also, increment and decrement operators can be used as statements, but not on
an expression level.

An else clause might also be added to the if statement before the keyword end
as follows:

One significant different between conditional statements in Script and C/C++ is
that multiple Boolean expressions will not be short-circuited. The bytecodes
generated by evaluating the entire expression are much smaller than inserting a
check after each Boolean operator followed by a conditional jump. This means
that:

Also, any number of conditional statements may be chained together using the
following syntax:


Loops
Script offers several constructs to facilitate iteration over a block of statements.
The first form of iterator executes the loop a fixed number of times with the
following syntax:

The second type of loop statement will continue executing as long as an
expression is true or as long as it is false.


Perhaps the most familiar form of loop statement is one that uses an iteration
variable and sets a beginning and ending limit as follows:

The boundary expressions will only be evaluated once, at the beginning of the
loop. This can either count from a lower bound to an upper bound or from an
upper bound to a lower bound if the down keyword is used.

Similar to C or C++ there are also statements to continue on to the next iteration
of the loop or break out of the loop completely. As fate would have it, these are
the "continue" and "break" statements, respectively. They can appear
inside any loop statement.

The last type of loop statement touches all the properties owned by a given
object and all of the children below it to an optionally specified depth. If the
depth option is not specified then only the immediate children of the object will
be visited. Alternatively, if all nested properties at arbitrary depths need to be
visited this can be accomplished by using the infinity keyword. Lastly, the
properties can be filtered using the objects Only keyword. This will skip other
properties and only iterate ov&r objects.

If the script was intended to set all the .busy properties of the simpsons to
"sleeping" in Figure 6. it could be done with the following loop.

This can be simplified by noting that all the properties contained in
forms.simpsons are object, so the objectsOnly filter is not necessary. Also,
because the default iteration depth only visits the immediate children of the
starting object, the depth does not need to be set to a value of one.

The invention provides an array property that allows for efficient handling of large
blocks of homogeneous data. The type of information that can be stored in an
array is limited to string, integer, or Boolean values. The array can be created
using the following syntax:

The path can be a local variable or a path to the desired location in the hierarchy
including the name of the array property to be created.

Now that the array has been created, there needs to be a means of adding
elements to the array. Creating new elements in an array is accomplished with
the insert statement that has the following syntax:
insert expression in path at int_expression
The insert statement will create a new element of the same type of the array, with
a value specified by expression at the index given by int_expression.
The array is one based, rather than C/C++ style zero based arrays. Hence, if
zero is given as the index for the insertion, it will result in an append operation.

Individual elements of the array can be removed with the delete statement as
detailed below.
Dealing with Properties and Objects
Accessing the contents of individual properties can be accomplished by
evaluating a path to that property, but what happens if you want to move or
delete a property, or even duplicate an entire object? Script has statements
specifically for those kinds of operations.
In order to delete an object, property, or array element use the delete
statement. In the case of a property, this will actually move the property or
object specified by path to the trash object until all scripts have completed
execution. This is necessary to prevent a script from holding on to a reference to
a property that no longer exists, or even worse, to prevent disaster when the
script deletes itself or the object in which it is contained.

The delete operator can also be used with elements in an array. Unlike deleting
a property, the array element will be removed immediately without being placed
in the trash. Use the bracket"[]" operator to specify which element of the array
should be deleted.

Use the copy statement to copy a property or object from one location to
another by specifying the source path and a destination path. Optional
parameters to the copy instruction are destination name, which is a string
expression that will be used to rename the property in the new location, and a
destination index, an integer expression that can be used as the index at which
the property should be inserted into the hierarchy. The original property name
will be used if a destination argument isn't supplied. Similarly, the property will
be copied to the object after all properties that currently contained by the object.
Either of these optional parameters may be omitted, but if both occur they must
be used in the order shown.


The copy statement will not overwrite a property or object if it already exists in
the destination object. In that case, the script must delete the property at the
destination path before copying the new property.
Use the move statement to place a property somewhere else in the hierarchy.
The syntax and function is similar to the copy statement except that the original
property or object will no longer exist in its former location.

Each of the previous three statements will work with either simple properties
(strings, integers, Boolean, scripts, or aliases) or objects. Making an assignment
to a path that has a final property that does not exist will create a simple
property, but an object cannot be automatically generated by the same means.
Objects are created via the create statement by supplying the class name of the
desired object and a path and name of the object to be created.

Dealing with long paths might be cumbersome and prone to errors so one final
feature of Script provides the scriptwriter with the ability to make a shortcut of
complex paths. By assigning a path of an object to a local variable, the variable
becomes a means of accessing the properties contained in the path. This
improves performance by not re-evaluating the path every time the variable is
used.

Shortcuts display a unique quality in that they will follow an object even if that
object is moved to another point in the hierarchy.

Calling Scripts and Sending Messages
Many times a script will handle a message that it receives from a widget, such as
an action script handling the message that a button was clicked or a timer expired,
but often those scripts will rely upon other scripts to perform some of the work.
Also, requests to the server for data and forms are often written in the form of a
function call. A function call uses the following syntax:
SCript_path( [parameters] [echo echoParameters] [options optionParameters])
The act of calling a script actually constructs a NACHOS message with the name
of the call and sends it to the object specified by the path.

The last component of this function call, annoy, is actually the name of the script or
the message being sent.
Many calls will only have parameters without the additional echo parameters or
message options. The recipient of the message can examine these parameters.
For instance, in order to get a stock quote we can make the call:
quote = aol.getStockQuote(sym:"aol")
In the example above, aol is object that handles the message "getStockQuote".
Additionally, we see the first example of naming parameters. The parameter list
to a function is a comma-separated list of expressions. Each expression may be
preceded by a name then a colon. In this case sym is the parameter name and
"aol" is the value of the parameter. Actually, each parameter is created and
copied by value as a property of the message object "getStockQuote", which
is why the parameters should be named. This allows the handler of the
message on the other side to refer to the parameters by name, rather than
relying upon the order of appearance in the parameter list. If a name is not
supplied, the parameter will be created as a property called "param".
Another example is:

This saves the homer object in the database as homerSimpson. The save
message to the database requires two parameters: path, the path in the
database to save the property, and stream: a path to an object or property
which will be saved. Because these parameters are named, the order can be
reversed without consequence.

Some message will need to define additional options to specify things such as
whether the message should be encrypted, or how long the system should wait
before it times out the message due to not receiving a response. These
parameters can be put in the options block of the message.

This will allow the native implementation a chance to deal with options before
sending the message. The only option handled by the kernel is "timeout" which
specifies in milliseconds how long the kernel should wait for a response before
throwing an exception. The echo parameters are used for asynchronous
messages as discussed below.
All simple properties (e.g., string, integer, Boolean, binary, script) are passed b y
value rather than by reference. Objects are usually passed aliases, which acts as
an implicit reference. Modifying properties contained in the object received as a
parameter will modify the original object. If a message containing aliases leaves
the local hierarchy, such as a request sent to the host, then aliases in the message
will be replaced with a copy of the object referenced by the alias. Most of the
time this is the desired behavior, but this can still be overridden by using the @
operator.

Sometimes an object may already have code to respond to a message. If the
object has such native code, which can respond to a given message, but also
contains a script handler for the same message, the script handler will override the
native code. Hypothetically, a native application might have code to handle a
message called shutdown(), but a script might be used to intercept that message
and determine if the caller has privileges to issue such a command. In this case,
after confirming the privileges of the caller, the script may call the utility function,
passMessage(), which will abort the script at the point of the call and allow the
object to handle the message with its native code.
Aliases have a special behavior when used as parameters in a message. If the
recipient object of the message is local {i.e., the object lives somewhere under
the same runtime root as the sender) then an alias property will be sent as an
alias in the message. This happens because the recipient can resolve the alias
to the object to obtain any properties owned by the object referenced by the
alias. However, if the message is sent off the local environment, the alias
property will be replaced by the object that it references. This can cause a
dramatic increase in size of the message because the underlying object and all of
the properties it contains will be copied to the message. In many cases, this is
the desired effect, but if an alias should not be resolved when sent over the wire,
it can be marked as a persistent airs with the @ operator.

Blocking calls
The default behavior of a function call is to block until the function that has been
called returns. This allows the calling script to process the result directly rather than
have another script handle the response. Referring back to Fig. 9. the last value
of a stock quote can be displayed using the library routine debug () as follows:

There is a lot going on in that last statement. First, a getStockQuote message is
sent to the services. aol object. The script will wait until the response comes
back before executing any more statements. Once the reply message returns,
the suffix path, . stream, aol. lastvalue, gets the desired data from the
parameter object of the message. This is displayed using the library routine
debug().
Asynchronous calls
By placing the reserved word async in front of a function call, the script will send
the message to the object and continue executing without waiting for a response.
This is more like posting a message than calling a function. Generally this means
that another script will handle the response to the message as well. The
example above can be recreated using two scripts that send the message
asynchronously and handles the response in another script.

Notice that the first script displays "finished" instead of waiting for the response
message.
Asynchronous calls present a problem not found with a blocking calls: the script
handling the response is different from the script that initiated the request.
Sometimes the script handling the response must know certain information
pertaining to the original request in order to handle the response properly. In
such a case, echo parameters facilitate the passing of information from the request
to the response. Any parameters passed in the echo block will be moved to the
message response and sent back. The echo keyword is used before the block
or echo parameters as below:

Echo parameters should be used judiciously because all echo parameters are
sent round trip across the network.
Return Values
The return statement allows the script to terminate execution before reaching
the end or pass a value back to the caller. Any expression following a return
statement will be evaluated and its result will be returned to the script that called
the one currently executing.

Exception Handling
Script allows the scriptwriter to handle runtime errors in the script with try/catch
blocks. The syntax is as follows:

Any errors that occur between the try and the catch statement will cause the
script to jump to the beginning of the statement list following the catch
statement. Inside the catch block the script can reference a special object by
specifying the path error. This object has an integer property, type, and a
string property, message, which give the error number and a short description of
the error, respectively.


Library Functions
The VM provides a set of built in functions for commonly used features such as
string manipulation and random number generation. The names of these
functions are case insensitive. However, unlike when sending messages or
calling scripts, the parameters to these library functions aren't named, but rely
upon the order of appearance in the argument list. Some of the parameters
have default values as listed in the specification below. The default value can be
overridden by including that parameter when calling that particular function. When
two default parameters exist, the apparent type of the parameter is used to
distinguish which value is being overridden. An example of this would be the
find () function with has a source string, a search pattern, a default starting
position, and a default Boolean to ignore case. If only three parameters are listed
in the call, then an integer value would specify the starting position while a
Boolean would indicate case sensitivity.

String Functions
Unlike the C/C++ library functions, the functions in this library do not modify the
source string and all indices are 1 based rather than 0 based. Functions return the
result of the operation, but the original arguments are left untouched. In many
cases it will be necessary to assign the result back to the source string.
(e.g. .foo = replace(.foo, " apples", " oranges")
Although the invention is described herein with reference to the preferred
embodiment, one skilled in the art will readily appreciate that other applications
may be substituted for those set forth herein without departing from the spirit and
scope of the present invention. Accordingly, the invention should only be
limited by the Claims included below.
WE CLAIM:
1. A process for a framework architecture for client systems, comprising the
steps of:
providing a server proxy client;
providing means on said server proxy client for receiving a client
information request from a client system;
providing server determination means on said server proxy client for
determining the proper server to service said client request;
sending said client request to said proper server;
receiving said proper server's response to said client request;
wherein said server proxy client acts as a proxy client for said client
system, performing the bulk of data processing for said client system;
wherein said server proxy client updates said client system with data,
presentation, and logic components using a universal data format;
wherein said server proxy client separates raw data from presentation
aspects of said response and places said data into said universal data format;
sending said data to said client system;
wherein said server proxy client receives presentation and logic
component updates; and
wherein said presentation component updates are for a specific client
device type.
2. A process as claimed in Claim 1, wherein said logic component updates
are shared between different client device types.
3. A process as claimed in Claim 1, comprising the step of:
providing a one-behind cache on said client system; and
wherein said client system checks said one-behind cache for any
presentation or logic components relating to a user's request;
wherein if any components relating to a user's request exist in said one-
behind cache, said client system checks if said components have expired;
wherein said client system uses said components to service the user's
request.
4. A process as claimed in Claim 3, wherein if said components have expired,
said client system requests any current versions of the expired components from
said server proxy client, wherein said server proxy client checks the current
version of a requesting client's presentation and logic components, if any of the
presentation and logic components requires updating, then said server proxy
client retrieves the latest version of any of the presentation and logic components
and sends it to the requesting client, and wherein the requesting client stores the
latest version of any of the presentation and logic components in said one-behind
cache.
5. A process as claimed in f Claim 1, comprising the step of:
sending said presentation and logic component updates to a client system.
6. A process as claimed in Claim 1, wherein said client system uses said
data and presentation components to create displays to a user.
7. A process as claimed in Claim 1, wherein said client system reuses said
data component for other display purposes.
8. A process as claimed in Claim 1, comprising the step of:
providing means on said server proxy client for saving a client system's
state on storage device; and
wherein the saved client system's state allows said server proxy client to
continue a client system's session when the client system changes connection
methods to or loses coverage with said server proxy client.
9. A process as claimed in Claim 1, comprising the step of:
providing a scripting language;
wherein said logic component updates are written in said scripting
language;
wherein said server proxy client compiles scripts written in said scripting
language into executable bytecodes;
wherein said server proxy client updates said client system's features by
sending said client system said executable bytecodes; and
wherein said client system executes said executable bytecodes in
response to a user's input.
10. A process as claimed in Claim 9, wherein a client system's presentation
aspects are controlled using said scripting language.
11. A process as claimed in Claim 1, wherein communication between said
server proxy client and said client system is via a binary encoding of an XML
data stream.
12. A process for dynamically configuring client systems, comprising the steps
of:
providing a host server;
providing a scripting language;
wherein said host server compiles scripts written in said scripting
language into executable bytecodes;
wherein said host server, upon receipt of a request for specific up to date
presentation components and/or executable bytecodes from a client system,
checks if the client system's original presentation components and/or executable
bytecodes have expired;
wherein said host server updates the client system's features by sending
the client system updated presentation components and/or executable bytecodes
if the original presentation components and/or executable bytecodes on the client
system have expired; and
wherein a client system executes presentation components and/or
executable bytecodes in response to a user's input.
13. A process as claimed in Claim 12, wherein said scripts define program •
logic.
14. A process as claimed in Claim 12, wherein said scripts create and control
user interface displays.
15. A process as claimed in Claim 12, wherein said client system receives
requested network information from said host server separated into data and
presentation components.
16. An apparatus for a framework architecture for client systems, comprising:
" a server proxy client;
means on said server proxy client for receiving a client information request
from a client system;
server determination means on said server proxy client for determining the
proper server to service said client request;
a module for sending said client request to said proper server;
a module for receiving said proper server's response to said client
request;
wherein said server proxy client acts as a proxy client for said client
system, performing the bulk of data processing for said client system;
wherein said server proxy client updates said client system with data,
presentation, and logic components using a universal data format;
wherein said server proxy client separates raw data from presentation
aspects of said response and places said data into said universal data format;
a module for sending said data to said client system;
wherein said server proxy client receives presentation and logic
component updates; and
wherein said presentation updates are for a specific client device type.
17. An apparatus as claimed in Claim 16, wherein said logic component
updates are shared between different client device types.
18. An apparatus as claimed in Claim 16, comprising:
a one-behind cache on said client system; and
wherein said client system checks said one-behind cache for any
presentation or logic components relating to a user's request;
wherein if any components relating to a user's request exist in said one-
behind cache, said client system checks if said components have expired;
wherein said client system uses said components to service the user's
request.
19. An apparatus as claimed in Claim 18, wherein if said components have
expired, said client system requests any current versions of the expired
components from said server proxy client, wherein said server proxy client
checks the current version of a requesting client's presentation and logic
components, if any of the presentation and logic components requires updating,
then said server proxy client retrieves the latest version of any of the presentation
and logic components and sends it to the requesting client, and wherein the
requesting client stores the latest version of any of the presentation and logic
components in said one-behind cache.
20. An apparatus as claimed in Claim 16, comprising:
a module for sending said presentation and logic component updates to a
client system.
21. An apparatus as claimed in Claim 16, wherein said client system uses
said data and presentation components to create displays to a user.
22. An apparatus as claimed in Claim 16, wherein said client system reuses
said data component for other display purposes.
23. An apparatus as claimed in Claim 16, comprising:
means on said server proxy client for saving a client system's state on
storage device; and
wherein the saved client system's state allows said server proxy client to
continue a client system's session when the client system changes connection
methods to or loses coverage with said server proxy client.
24. An apparatus as claimed in Claim 16, comprising:
a scripting language;
wherein said logic component updates are written in said scripting
language;
wherein said server proxy client compiles scripts written in said scripting
language into executable bytecodes;
wherein said server proxy client updates said client system's features by
sending said client system said executable bytecodes; and
wherein said client system executes said executable bytecodes in
response to a user's input.
25. An apparatus as claimed in Claim 24, wherein a client system's
presentation aspects are controlled using said scripting language.
26. An apparatus as claimed in 16, wherein communication between said
server proxy client and said client system is via a binary encoding of an XML
data stream.
27. An apparatus for dynamically configuring client systems, comprising:
a host server;
a scripting language;
wherein said host server compiles scripts written in said scripting
language into executable bytecodes;
wherein said host server, upon receipt of a request for specific up to date
presentation components and/or executable bytecodes from a client system,
checks if the client system's original presentation components and/or executable
bytecodes have expired;
wherein said host server updates the client system's features by sending
the client system updated presentation components and/or executable bytecodes
if the original presentation components and/or executable bytecodes on the client
system have expired; and
wherein a client system executes presentation components and/or
executable bytecodes in response to a user's input.
28. An apparatus as claimed in Claim 27, wherein said scripts define program
logic.
29. An apparatus as claimed in Claim 27, wherein said scripts create and
control user interface displays.
30. An apparatus as claimed in, wherein said client system receives
requested network information from said host server separated into data and
presentation components.
r
A handheld client framework system provides a server proxy client (509)
that services client requests for network accessible information and determines
the server that is most appropriate to supply the requested information and sends
information requests packets to that server across the Internet and/or internet.
Server responses to information requests are received by the server proxy client.
The server proxy client separates the response information into the appropriate
data components. Data components are sent to the appropriate client.
Presentation and logic components are temporarily stored in a one-behind cache
on the client (501). A client will continue to use the presentation and logic
components already installed or in the one-behind cache to serve the current
user request. Any updates sent by the server proxy client (509) and stored in the
one-behind cache are retrieved by the client upon subsequent use by the user.

Documents:

1934-kolnp-2004-granted-abstract.pdf

1934-kolnp-2004-granted-assignment.pdf

1934-kolnp-2004-granted-claims.pdf

1934-kolnp-2004-granted-correspondence.pdf

1934-kolnp-2004-granted-description (complete).pdf

1934-kolnp-2004-granted-examination report.pdf

1934-kolnp-2004-granted-form 1.pdf

1934-kolnp-2004-granted-form 18.pdf

1934-kolnp-2004-granted-form 3.pdf

1934-kolnp-2004-granted-form 5.pdf

1934-kolnp-2004-granted-gpa.pdf

1934-kolnp-2004-granted-reply to examination report.pdf

1934-kolnp-2004-granted-specification.pdf


Patent Number 233789
Indian Patent Application Number 1934/KOLNP/2004
PG Journal Number 15/2099
Publication Date 10-Apr-2009
Grant Date 08-Apr-2009
Date of Filing 15-Dec-2004
Name of Patentee AMERICA ONLINE INCORPORATED
Applicant Address 22000 AOL WAY, DULLES, VA
Inventors:
# Inventor's Name Inventor's Address
1 BESBRIS DAVID 10 ELDORADO, FOOTHILL RANCH, CA 92610
2 DOERKSEN RICHARD 90 MILLBROOK, IRVINE, CA 92618
PCT International Classification Number G06F 15/16
PCT International Application Number PCT/US2003/018942
PCT International Filing date 2003-06-16
PCT Conventions:
# PCT Application Number Date of Convention Priority Country
1 10/195,903 2002-07-15 U.S.A.