666 lines
32 KiB
Plaintext
666 lines
32 KiB
Plaintext
|
Overview of Cyberterm,
|
|||
|
a Cyberspace Protocol Implementation
|
|||
|
|
|||
|
KEYWORDS
|
|||
|
|
|||
|
cyberspace, protocol, Cyberterm, virtual reality, SECTOR, AGENT
|
|||
|
|
|||
|
AUTHOR
|
|||
|
|
|||
|
Michael Snoswell, Programmer in Imaging Systems, Vision Systems Limited,
|
|||
|
Second Avenue, Technology Park, The Levels, 5095, South Australia.
|
|||
|
|
|||
|
ABSTRACT
|
|||
|
|
|||
|
Although the concept of cyberspace has variously been used to describe
|
|||
|
concepts ranging from being in a particular directory in a file system to a
|
|||
|
full immersion/neural-tap type 3D environment, few attempts have been
|
|||
|
made to establish a fundamental connection layer under which any
|
|||
|
independent interaction within such an environment may take place. A
|
|||
|
number of system concepts have been developed that would be essential
|
|||
|
tools towards realising the more advanced version of cyberspace mentioned
|
|||
|
above (eg head mounted displays, datagloves, 3D 'Rooms', MUDs etc) but
|
|||
|
little work has been done on producing a base level integration layer between
|
|||
|
any of these systems in an extensible fashion. The problem is analogous
|
|||
|
to the development of words with which to communicate, rather than
|
|||
|
focusing on sentence structure, or poetry. Once the words are there and
|
|||
|
the grammer is established, any data or concept can be communicated.
|
|||
|
The Cyberterm project arose from a desire to provide a freely available
|
|||
|
framework for communication, with example code implementation so that this
|
|||
|
basic communication hurdle could be overcome and the more abstract
|
|||
|
features of virtual reality, cyberspace conferenceing etc could be focused
|
|||
|
upon and developed.
|
|||
|
This protocol has been called Cyberspace Protocol (CP) and software
|
|||
|
which implements this protocol is called a Cyberterm (CT). The CP version
|
|||
|
is currently 0.3 beta.
|
|||
|
|
|||
|
THIS DOCUMENT
|
|||
|
|
|||
|
This document is an overview of ideas and concepts that have evolved
|
|||
|
over the last year or so. It is not meant to be comprehensive, exhaustive,
|
|||
|
complete or static.
|
|||
|
|
|||
|
The first part of this article discusses some broad ideas and then
|
|||
|
gives a brief description of the terms used. Following this is a semi
|
|||
|
technical discussion on a walk though some of aspects of the system.
|
|||
|
After that a brief description of the software as it stands is
|
|||
|
given, along with projected milestones.
|
|||
|
|
|||
|
This article mentions many ideas and concepts that stem from the use
|
|||
|
and implementation of the Cyberspace Protocal (hereafter called CP).
|
|||
|
A large portion of this paper discusses broad uses of CP and the resulting
|
|||
|
system characteristics rather than focusing on the protocol alone.
|
|||
|
The reason for this is two-fold:
|
|||
|
|
|||
|
1) The protocol by itself would seem pretty meaningless without
|
|||
|
describing how it works and how its resulting use affects the
|
|||
|
dynamics of a system, and
|
|||
|
|
|||
|
2) The protocol isn't firmly set. As the system is developed, more
|
|||
|
holes are found and things change. There are a dozen or so basic
|
|||
|
messages and a dozen or so rules that are followed, these are in flux
|
|||
|
although a base set is firmly established.
|
|||
|
|
|||
|
It is hoped that this paper will give readers some familiarity with the
|
|||
|
type of system that is beeing aimed for. A more complete description
|
|||
|
will be left to the source code itself when it is released.
|
|||
|
|
|||
|
Note: Where possible terms in capitals refer to concepts/objects which
|
|||
|
are peculiar to this system. This is to try to differentiate items
|
|||
|
when using English to describe some ideas etc, to make things a bit clearer.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SYSTEM OVERVIEW
|
|||
|
|
|||
|
The need for a low cost, low bandwidth cyberterminal (CYBERTERM) has
|
|||
|
arisen due to the increasing need to communicate over existing data
|
|||
|
channels with existing hardware. The system is aimed for widespread use
|
|||
|
over a number of platforms and data connections. Initial release is planned
|
|||
|
for late '92 in a shareware format with full source code for all available
|
|||
|
systems.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
INTERFACE
|
|||
|
|
|||
|
The interface is simply using the screen with the keyboard and mouse to
|
|||
|
provide a window view into a 3D environment.
|
|||
|
|
|||
|
The addition of Glove, HMD and other devices will be encouraged but not
|
|||
|
initally supported and will not be required.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
INITIAL SYSTEM
|
|||
|
|
|||
|
The system will initially be designed around a 386SX PC (or better),
|
|||
|
with Amiga and X11 (on a Sun IPC) ports being made, but with no special
|
|||
|
provisos for these machines at this point. All connections will be via
|
|||
|
modem with possible TCP/IP connections for the Sun. Each Cyberterm is
|
|||
|
fully self contained on each machine and can operate on a stand-alone basis.
|
|||
|
Software is currently being written and a beta version will be available
|
|||
|
in a few months (now is July '92). Release will be via request to selected
|
|||
|
users for immediate feedback, followed by general shareware release.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SYSTEM ARCHITECHETURE
|
|||
|
|
|||
|
The whole nature of the cyberspace is controlled by the messages that are
|
|||
|
sent, which implicitly define the rules for objects, users etc within the
|
|||
|
cyberspace. To more clearly describe the nature of these rules and
|
|||
|
messages, a number of terms have been borrowed and coined to describe
|
|||
|
new/borrowed concepts. Once these terms are defined, then it becomes
|
|||
|
much clearer as to how the whole thing fits together and the interaction of
|
|||
|
objects and the nature of this interaction will become evident as you
|
|||
|
understand the rules and contraints which define the behaviour of the
|
|||
|
cyberspace.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
DEFINITIONS
|
|||
|
|
|||
|
These definitions are brief and are given to allow a fuller understanding of
|
|||
|
the descriptions to follow.
|
|||
|
|
|||
|
CLIENT
|
|||
|
|
|||
|
A CLIENT is the term to describe a person (USER) who is connected to a
|
|||
|
system. The CLIENT may be automated (an AGENT).
|
|||
|
|
|||
|
SERVER
|
|||
|
|
|||
|
A SERVER is the central message handling facility which handles the data
|
|||
|
flow between CLIENTS. (A bit like a BBS)
|
|||
|
|
|||
|
LOCAL SERVER (LS)
|
|||
|
|
|||
|
A LOCAL SERVER is a SERVER that resides on the same machine as the
|
|||
|
CLIENT.
|
|||
|
|
|||
|
REMOTE SERVER (RS)
|
|||
|
|
|||
|
A REMOTE SERVER is a SERVER which is not at the same physical machine as
|
|||
|
the CLIENT in question.
|
|||
|
|
|||
|
CYBERTERM (CT)
|
|||
|
|
|||
|
This is the term to define the CLIENT and the LOCAL SERVER together which a USER
|
|||
|
interfaces to. This all resides on his local machine.
|
|||
|
|
|||
|
SECTOR
|
|||
|
|
|||
|
A SECTOR is a region of CYBERSPACE which is controlled by a single SERVER.
|
|||
|
|
|||
|
SECTOR CONTROLLER (SC)
|
|||
|
|
|||
|
This is another term for the SERVER, but which covers the CLIENT that is
|
|||
|
local to that SERVER (akin to a News conference moderator or a BBS
|
|||
|
sysop).
|
|||
|
|
|||
|
PERMASPACE (PS)
|
|||
|
|
|||
|
PERMASPACE is an area of the SECTOR which has been allocated for a
|
|||
|
specific purpose. The data defining this region resides in the SC which
|
|||
|
controls the SECTOR.
|
|||
|
|
|||
|
PRIVATE PERMASPACE (PPS)
|
|||
|
|
|||
|
PERMASPACE can belong to a single CLIENT (or else it belongs to the SC). If a
|
|||
|
USER acquires a region of a SECTOR for their own use, that region is
|
|||
|
called PRIVATE PERMASPACE and is controlled by the owner CLIENT's LOCAL
|
|||
|
SECTOR CONTROLLER (ie the SERVER which resides on their own machine).
|
|||
|
|
|||
|
LINE
|
|||
|
|
|||
|
A LINE is the connection from the SERVERs to the CLIENTS, LINEs can be
|
|||
|
virtual or real.
|
|||
|
|
|||
|
AGENTS
|
|||
|
|
|||
|
AGENTS are macros that use the messages and protocols of the system to
|
|||
|
perform tasks as the USER himself would. There are 3 types of AGENTS
|
|||
|
defined so far. PRIVATE AGENTS, SC AGENTS and INDEPENDENT AGENTS.
|
|||
|
|
|||
|
ASPECT
|
|||
|
|
|||
|
ASPECT is the description of an OBJECT and covers visual and audio
|
|||
|
definitions (dynamic and static) in an extensible hierarchy of
|
|||
|
increasing complexity. All objects have default ASPECTs.
|
|||
|
|
|||
|
CYBERSPACE CONFERENCING (CBC)
|
|||
|
|
|||
|
This is the initial "let's get together and have a chat" aim of the
|
|||
|
system and is useful when people ask "So what are you working on?". You
|
|||
|
say, "I'm working on a Cyberspace Conferencing system", or something
|
|||
|
like that.
|
|||
|
|
|||
|
GUEST
|
|||
|
|
|||
|
A GUEST is a CLIENT who is remote to your location who is connected to
|
|||
|
your LOCAL SERVER.
|
|||
|
|
|||
|
BBS
|
|||
|
|
|||
|
A bulletin board system, which when in "chat" or "conference" mode is a
|
|||
|
good analogy for what this system will build upon (ie a graphical
|
|||
|
version of a BBS CB channel.)
|
|||
|
|
|||
|
OBJECTS
|
|||
|
|
|||
|
OBJECTs are any things which exist within a SECTOR and are listed in a
|
|||
|
SERVER database. This includes CLIENTS, AGENTS, PERMASPACE etc.
|
|||
|
|
|||
|
ID
|
|||
|
|
|||
|
ID applies to AGENTS, CLIENTS and SERVERS. It is a unique 32 bit number
|
|||
|
where the top (MS) 4 bits define what type of object the ID belongs to.
|
|||
|
|
|||
|
FAR - 1,000 units
|
|||
|
NEAR - 100 units
|
|||
|
CLOSE - 10 units
|
|||
|
VERY_CLOSE - 1 unit (ie 26 adjacent units)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
A DEMONSTRATION RUN THROUGH
|
|||
|
|
|||
|
Perhaps the best way to show how the various features of the system interact
|
|||
|
and the effect of the protocol on system implementation is to give a
|
|||
|
description of a typical session on a CT. This description will not be
|
|||
|
exhaustive and will give only some technical details of the message passing
|
|||
|
that will take place during such a session. A complete description of all
|
|||
|
the features will not be given here as that would take too long and this
|
|||
|
is only meant to be an overview. However, what I hope is to be able to
|
|||
|
give some insight into what the working system will be like.
|
|||
|
|
|||
|
First off when you start up the CYBERTERM you have a blank screen with maybe
|
|||
|
a few control buttons around the edges.
|
|||
|
|
|||
|
The first step is to log into the LOCAL SERVER. Now this is a SECTOR
|
|||
|
CONTROLLER that resides on the same machine and in the first incarnation of
|
|||
|
the software is all in the same executable.
|
|||
|
|
|||
|
This connection is done by hitting the 'connect' key (or mouse button etc).
|
|||
|
This will send a REQUEST_TO_ENTER message to your LOCAL SERVER, but first
|
|||
|
the interface will require that you enter some parameters. These are:
|
|||
|
|
|||
|
1) your proposed entry point into the LOCAL SECTOR, and
|
|||
|
|
|||
|
2) the proposed viewing direction.
|
|||
|
|
|||
|
In a more advanced system these parameters will probably be pre-set in
|
|||
|
an option menu and stored in a configuration file, so you don't have
|
|||
|
to enter these details each time.
|
|||
|
|
|||
|
(Note: There are quite a few places where things can be pre-set like
|
|||
|
this, as you'll see).
|
|||
|
|
|||
|
Once the CLIENT software has assembled this data it sends the message to
|
|||
|
the LOCAL SERVER. This message consists of:
|
|||
|
|
|||
|
1. your ID, a unique identifying code (4 bytes) that defines you
|
|||
|
as a human CLIENT as well as giving you a unique handle for reference
|
|||
|
purposes.
|
|||
|
|
|||
|
2. the length of the following message (2 bytes)
|
|||
|
|
|||
|
3. the message code (2 bytes), which in this case is REQUEST_TO_ENTER.
|
|||
|
|
|||
|
4. the proposed entry location within the remote SECTOR (3 x 32 bits)
|
|||
|
|
|||
|
5. the proposed viewing direction within the remote SECTOR (3 x 32 bits)
|
|||
|
|
|||
|
Note: All data relating to position and velocity is sent as 4 bytes in
|
|||
|
fixed decimal format, with 2 bytes integer and 2 bytes fraction, integer
|
|||
|
fraction signed.
|
|||
|
|
|||
|
The connection between the CLIENT and the LOCAL SERVER is a buffer
|
|||
|
that is a LINE for the CLIENT and a VIRTUAL LINE for the SERVER.
|
|||
|
|
|||
|
A daemon type function transfers the message across to the SERVER's
|
|||
|
VIRTUAL LINE (and visa versa).
|
|||
|
|
|||
|
The reason this is done is so that the software for a REMOTE SERVER and
|
|||
|
the LOCAL SERVER will be the same, except that the daemon will be
|
|||
|
different (ie transfering data to and from a modem, serial line, socket,
|
|||
|
or whatever). So as far as the SERVER is concerned it is running
|
|||
|
autonomously from the CLIENT and the human interface handling software.
|
|||
|
(in fact a REMOTE SERVER is the same software on another machine,
|
|||
|
complete with it's own CLIENT and USER who calls it their LOCAL SERVER. A
|
|||
|
central SERVER simply has lots of physical lines for connection, whereas
|
|||
|
the server on your local machine will have 1 physical LINE (eg modem) but
|
|||
|
many VIRTUAL LINES so many people can enter your PRIVATE PERMASPACE and
|
|||
|
reside in your LOCAL SERVER over the one LINE.)
|
|||
|
|
|||
|
The LOCAL SERVER checks its internal database of objects to see if you are
|
|||
|
allowed to enter at the specified point (more on that in a moment) then
|
|||
|
sends a MOVE_TO message back to the CLIENT. This includes the CLIENT's
|
|||
|
ID to make sure the right person gets the message (not necessary
|
|||
|
obviously as you're the only one logged into your machine), the message
|
|||
|
length, the messgae type (MOVE_TO) in this case, a location
|
|||
|
tuple, a direction tuple and a velocity tuple (which is zero in this
|
|||
|
case). Now it looks like we're already sending redundant information, but
|
|||
|
these are generic commands that can apply to many situations.
|
|||
|
|
|||
|
Your CLIENT software now gets this MOVE_TO message and can throw up
|
|||
|
an image on the screen which shows what the SECTOR looks like from this
|
|||
|
viewpoint.
|
|||
|
|
|||
|
What's there to display? Well by default the 'floor' of the sctor is
|
|||
|
blue and can be displayed as a grid. The spacing between the lines of the
|
|||
|
grid, and whether it is solid or wireframe is a configurable option and is a
|
|||
|
function of the display software, not of the system as a whole.
|
|||
|
|
|||
|
The range of co-ords is 2**16 (65536), signed, as a 32 bit fixed decimal
|
|||
|
number. This effectively gives a cube 65536 units on a side. That seems
|
|||
|
small but think of each unit as one metre. This means the SECTOR is about 65kms
|
|||
|
cubed, with increments down to 1/65 mm. I really think this will cator
|
|||
|
for system (and user) requirements for a long time to come. There is
|
|||
|
room for much more detail than this actually (2**32 times more) as is
|
|||
|
shown later under PRIVATE PERMASPACE.
|
|||
|
|
|||
|
Okay, so we see a blue grid below us. Our CLIENT software is keeping
|
|||
|
track of our velocity and co-ords at the last vector change (ie time
|
|||
|
stamped when we received the MOVE_TO message) in its internal object
|
|||
|
database (this is separate from the SERVER's object database).
|
|||
|
So a simple look at the time and a scan of the object database will give the
|
|||
|
current location of all objects and the screen can be updated accordingly.
|
|||
|
If your machine is slow this screen update is slow etc.
|
|||
|
|
|||
|
Now that you're logged into the LOCAL SERVER things get a bit more
|
|||
|
interesting. To make things a bit clearer I'll skip over the details a
|
|||
|
bit here and get to a remote connection.
|
|||
|
|
|||
|
Suffice to say that the objects contained in the LOCAL SERVER all belong
|
|||
|
to your PRIVATE PERMASPACE. There may be objects here, for instance that
|
|||
|
represent your hard disk and so you may have a graphical operating system
|
|||
|
where you can move files, launch applications etc. You can construct
|
|||
|
objects and store them for later use. Certain areas may be defined as
|
|||
|
doorways to the control of real-world apparatus by telepresence etc.
|
|||
|
|
|||
|
You now have your own SECTOR, a whole world really, in which to create
|
|||
|
and move. This system in later implementations may be tailored to the
|
|||
|
host machine and become a GUI like MS Windows or OpenLook etc, making the
|
|||
|
Cyberterm well worth using on its own.
|
|||
|
|
|||
|
The next step is to send a TRANSFER_SECTOR command. This will move you
|
|||
|
to another SECTOR. This will obviously be a REMOTE SECTOR. It's up to
|
|||
|
you to specify a legal SECTOR you wish to transfer to and it's up to
|
|||
|
your LOCAL SECTOR CONTROLLER to know how to connect to the SECTOR.
|
|||
|
Asumming all this has been set up (the connection details for each physical
|
|||
|
line your SC has will be defined in the configuration files), your LOCAL SC
|
|||
|
(for a modem connection) dials up the remote SC and identifies itself as
|
|||
|
an SC that has a CLIENT that wants to enter. This is sent as a
|
|||
|
REQUEST_TO_ENTER command (as before). Your CLIENT software knows that to
|
|||
|
issue a TRANSFER_SECTOR message you must enter a location and view
|
|||
|
direction so it prompts you for them (or gets it from pre-set options
|
|||
|
as before). The local SC passes the info on to the remote SC. If the
|
|||
|
request message is okay, a MOVE_TO command is sent from the remote SC
|
|||
|
to the local SC which now knows that any data coming in from the CLIENT
|
|||
|
(on LINE x) is transfered straight to the remote SC (on LINE y) and visa versa.
|
|||
|
This is easy to implement because each message has the CLIENT ID at the
|
|||
|
beginning, so it is a simple matter for the SC to chech to see if that CLIENT
|
|||
|
has a redirection flag set. If the flag is set, the SC gets the message length
|
|||
|
(the next 16 bits of the message) and then gets the whole remainder of the
|
|||
|
message as a block and passes it directly out to the redirected line.
|
|||
|
|
|||
|
Now that your CLIENT software has a new location and viewdirection it
|
|||
|
adjusts it's internal object database and updates the screen accordingly
|
|||
|
(the blue grid). The SECTOR you came from is represented by a single
|
|||
|
OBJECT (a blue cube by default) that is your PRIVATE PERMASPACE.
|
|||
|
|
|||
|
When you entered the SECTOR the SC sent a message of its own to all
|
|||
|
other users who are within NEAR (100 units) of where you entered.
|
|||
|
These messages say what your ID is, the message length, the message type
|
|||
|
(PERSONAL_ASPECT_DATA), your vector, viewdirection and location (this is
|
|||
|
actually a PERSONAL_ASPECT_DATA message which has ID, vector and
|
|||
|
location in the front of the message but without the ASPECT data as the
|
|||
|
SC doesn't have this yet).
|
|||
|
|
|||
|
These other users may have their systems set up to ignore these
|
|||
|
(unexpected) messages, but if they process them then you,
|
|||
|
the new user, will appear on their screens in the appropriate place and will be
|
|||
|
placed in their individual object databases. They may also have a
|
|||
|
database of 'know ASPECTS' and can check to see if they already know
|
|||
|
what you look like and so can display you in your full glory straight
|
|||
|
away. Alternatively they may have their system set up to automatically request
|
|||
|
your APSECT if it is unknown and to display it then.
|
|||
|
|
|||
|
Now you can send a message (or a more sophisticated system would be
|
|||
|
pre-set) to ask the REMOTE SC what the brief details are of all users
|
|||
|
within NEAR of your location (that is, to send you PERSONAL_ASPECT_DATA
|
|||
|
messages with ID, vector and direction. This is a PERSONAL_ASPECT_DATA message.
|
|||
|
The SERVER sees that the CLIENT ID you sent doesn't match the ID of the
|
|||
|
sender (by checking whose on that LINE) and so it know the message must be
|
|||
|
a request for information. It looks for the ASPECT data in its own database
|
|||
|
or asks the CLIENT in question for the data, then sends the information
|
|||
|
back to you. This data is added into your CLIENT's object database (with
|
|||
|
a time stamp) and the objects appear on your screen with the default
|
|||
|
ASPECT. You can request the details of other users over different distances
|
|||
|
first off if you like. Once you know the ID of other users you can
|
|||
|
REQUEST_ASPECT_DATA of a specific ID, to whatever level of detail of
|
|||
|
ASPECT exists. So on your screen these other users appear as arrows
|
|||
|
(their default ASPECT) or their real shape (ie higher level ASPECTS).
|
|||
|
|
|||
|
When you move (that is, change your velocity or direction) your CLIENT
|
|||
|
automatically sends a message (MOVE_TO) to the SERVER. If this is okay by
|
|||
|
the SERVER then it sends a MOVE_TO message to you telling you where to
|
|||
|
move to (the reason for this is made clear later) and then the SERVER
|
|||
|
distributes the message to all NEAR CLIENTS. In this way, as you watch
|
|||
|
your screen with these objects moving around in straight lines until
|
|||
|
they change vector or velocity when you get a message from the REMOTE
|
|||
|
SC telling you their new velocity/direction. If you turn around your
|
|||
|
system sends a MOVE_TO message that is distributed and others see your
|
|||
|
shape turn around etc.
|
|||
|
|
|||
|
It is important to note that there is no collision control and it is quite
|
|||
|
possible for you to move straight through someone else. This is a
|
|||
|
controversial decision that is open for objections, but (as will be seen
|
|||
|
later) is not always true and it is within the current CP to change this.
|
|||
|
|
|||
|
Note: The only possible exception to this is stopping over a PERMASPACE
|
|||
|
unit you do not own.
|
|||
|
|
|||
|
An optional message that you can send to the SC is CHANGE_UPDATE_RATE
|
|||
|
which tells the SC how often to send you location, vel etc updates
|
|||
|
of all CLIENTS within a given distance of yourself. Normally you would
|
|||
|
have to request this information specifically and the position of users
|
|||
|
you see on the screen may be false (for example a user may drift out
|
|||
|
of the NEAR distance from you but your object database is still tracking
|
|||
|
them saying they are moving at such and such a vector and speed when
|
|||
|
actually they may have changed direction etc. So with a CHANGE_UPDATE_RATE
|
|||
|
message you can request to be updated on the status of users who are
|
|||
|
NEAR or FAR or whatever say every 10 seconds. Of course if they move when
|
|||
|
they are within NEAR of you then you will be automatically updated anyway).
|
|||
|
|
|||
|
Other commands within a SECTOR are SEND_MAIL, REQUEST_PRIVATE_PERMASPACE etc.
|
|||
|
|
|||
|
Similarly to requesting the ASPECT of users in the area, you can
|
|||
|
request the ASPECT of PERMASPACE in the area.
|
|||
|
|
|||
|
PERMASPACE is permanaent regions that default to blue.
|
|||
|
|
|||
|
These will usually consist of PRIVATE PERMASPACE but some regions may
|
|||
|
be owned by the SC such as public database access areas and public
|
|||
|
bulletin boards (more on these later).
|
|||
|
|
|||
|
Just like CLIENTS, PERMASPACE has a default ASPECT that is a blue cube
|
|||
|
that occupies the unit cube that is the centre of its local co-ordinate
|
|||
|
space. Requests for higher level ASPECTS may reveal these cubes to be
|
|||
|
buildings, flashing lights or data structures etc.
|
|||
|
|
|||
|
A PRIVATE PERMASPACE ASPECT may reveal that it belongs to a friend of
|
|||
|
yours. (It may his name on top or maybe you recognise his style of
|
|||
|
castle!)
|
|||
|
|
|||
|
You can move through PERMASPACE but you CANNOT stop (ie have 0 velocity)
|
|||
|
when in a unit cube of PERMASPACE which does not belong to you.
|
|||
|
|
|||
|
So you stop one unit away (VERYCLOSE) and send a
|
|||
|
REQUEST_TO_ENTER_PRIVATE_PERMASPACE. This is interpreted by the SC as
|
|||
|
a TRANSFER_SECTOR message, to the LOCAL SERVER of the user who owns
|
|||
|
that PPS. If the request is okayed by the owner then you are sent a
|
|||
|
MOVE_TO message that moves you to the coords of the PP.
|
|||
|
|
|||
|
Now you have transfered to a new SECTOR and are controlled by
|
|||
|
the owner's private SC on his machine. The remote SC you were controlled
|
|||
|
by now routes all your data straight to the LINE that that new SC is on.
|
|||
|
(in a similar way to how your LOCAL SC is re-routing all your data
|
|||
|
straight through to the modem).
|
|||
|
|
|||
|
Once again your screen is blank and you can request to see what's around
|
|||
|
you. This person may have his SECTOR set up to look like a lounge room
|
|||
|
or as rolling hills etc. All messages from users who you could see before
|
|||
|
(ie those outside that unit cube of PPS that you're in) are filtered out
|
|||
|
to reduce bandwidth requirements (you may, for instance want to keep mail
|
|||
|
coming through. If you have a powerful system you may still get all
|
|||
|
'outside' messages but make the walls of the living room appear
|
|||
|
transparent like smoked glass etc).
|
|||
|
|
|||
|
Now that you are in his SECTOR you must abide by his rules. If you send
|
|||
|
a MOVE_TO message that will make you collide with objects in his PPS (eg a
|
|||
|
chair or wall) then his sector can return okay for that request, but
|
|||
|
when it calculates that you've hit a wall, it can send an addittional
|
|||
|
MOVE_TO message that sets your velocity to zero. In this way you must
|
|||
|
follow the rules he has set up in his PPS. Obviously if he proves to be
|
|||
|
obnoxious you can send a EXIT_SECTOR message that the main REMOTE SC
|
|||
|
intercepts and so moves you back out into public cyberspace,
|
|||
|
garuanteed.
|
|||
|
|
|||
|
Other users can enter the PPS of your frined at the same time so you
|
|||
|
can have a 'private conference with only those present'. At that time
|
|||
|
his LOCAL SC has set up secondary virtual LINES to allow the
|
|||
|
messages from several remote CLIENTS to come down the one modem
|
|||
|
connection. As each message is preceeded by the message senders ID, it's
|
|||
|
a fairly simply task for the SC to put the incoming messages into
|
|||
|
the appropriate virtual LINE buffers so the it thinks there are lots of
|
|||
|
people/modems connected up.
|
|||
|
|
|||
|
Of course, the main remote SC may also provide private conference rooms where
|
|||
|
similar duscussion can take place.
|
|||
|
|
|||
|
This PPS may alternatively be the front end to access a commercial
|
|||
|
database, a game service, a ticket sales office etc.
|
|||
|
|
|||
|
So you want to establish your own PPS within the public SECTOR? You send
|
|||
|
a REQUEST_TO_ACQUIRE_PRIVATE_PERMASPACE message that is sent via the REMOTE
|
|||
|
SC to anyone who is CLOSE to you (within 10 units). If less than 50% of
|
|||
|
those nearby say 'no' to the SC then you aquire 1 unit of PPS and this is
|
|||
|
registered in the SC's object database. You can optionally send
|
|||
|
PERMASPACE_DATA messages to the SC that define the ASPECT of your PPS to
|
|||
|
whatever level of detail you desire so others can see your new
|
|||
|
acquisition. Clearly, you can aquire several PPS units next to each other
|
|||
|
and build up a composite structure that is more impressive.
|
|||
|
|
|||
|
This acquisition is monitored by the REMOTE SC and there may be limits defined.
|
|||
|
|
|||
|
Some reqions of PPS that belong to commercial users may be large. For example
|
|||
|
a database service for shares information may have a large area of PPS that
|
|||
|
(when you request to see higher level aspects) may be a large building
|
|||
|
surrounded by wide grass areas with fountains and gardens. Maybe there
|
|||
|
would be large areas within the owned PPS block that has no higher ASPECT so
|
|||
|
that in a crowded area of many PPSs the structure will stand out as it
|
|||
|
has all this 'open' space around it. In the same way office blocks today
|
|||
|
in large dense city areas surround themselves with grassy promenades and
|
|||
|
foyers with open areas and plants. Of course a default level display
|
|||
|
would show just a large matrix of blue wireframe cubes.
|
|||
|
|
|||
|
You can send mail to a friend by several methods. The most straight
|
|||
|
forward would be to use the SEND_MAIL message where you specify the
|
|||
|
recipients ID and then the message size and then the message itself.
|
|||
|
(no set format). The mail will be sent straight to his LINE.
|
|||
|
|
|||
|
He may have his CLIENT software set up so mail appears as a flashing icon on
|
|||
|
the computer screen or as a full letter box outside the little cottage that is
|
|||
|
his PPS.
|
|||
|
|
|||
|
Mail can also be sent to a location (using an AGENT) and the SC will
|
|||
|
try to inform the owner. This AGENTS may have the ASPECT of a piece of paper
|
|||
|
or an envelope or a flyer with the message as text, built into its ASPECT.
|
|||
|
|
|||
|
In a similar way a true bulletin board could be set up, where people
|
|||
|
could leave messages for others to read simply by leaving AGENTS at
|
|||
|
predefined locations setup to be massage areas.
|
|||
|
|
|||
|
So you can conference with otheres, send mail, access commercial
|
|||
|
services etc.
|
|||
|
|
|||
|
The commercial services may first connect to the system using their
|
|||
|
original 2D flat screen interface, so when you enter their PPS you just
|
|||
|
see a single screen. In this way the interface changes would be minimal
|
|||
|
to start with but they could develop better interfaces to make data
|
|||
|
access more efficient. A statistics service could have a PPS where data was
|
|||
|
represented as dynamic 3D structures etc.
|
|||
|
|
|||
|
Probably the most useful items within the cybersapce are your AGENTS.
|
|||
|
These items exist as packets of messages that together form an entity
|
|||
|
that is a type of OBJECT. See the comprehensive definition later on for
|
|||
|
details. AGENTS can do whatever you can do, in your place. Some AGENTS
|
|||
|
are simply OBJECTS that you use (for instance a 'design-an-aspect' AGENT
|
|||
|
may allow you to draw items in 3D (walls, texture, motion etc) by issuing
|
|||
|
messages to define ASPECT as it is moved by your Glove when certain gestures
|
|||
|
are used. It may be an access key tool (eg you might buy a '10 shot' AGENT
|
|||
|
from a database service. When you want to access that database you instruct
|
|||
|
the AGENT as to what you want. The AGENT then goes off to the database's
|
|||
|
PPS (moving as any other CLIENT would, so others would see it travelling)
|
|||
|
and gets a high prioirty of service (because you paid for it!) and also
|
|||
|
knows how the database works and so can access the data faster and then
|
|||
|
mail the data back to you (or maybe return to you itself with its ASPECT
|
|||
|
changed to show you the data) and after the tenth use it doesn't come back.
|
|||
|
|
|||
|
The last sort of AGENT is independant. These actually are macro
|
|||
|
languages that are executed by the SC and may act as guides
|
|||
|
to newcomers or perform tasks within the sector for you (ie like a
|
|||
|
servant). They can exist by themselves. You can have an AGENT that
|
|||
|
'lives' in your PPS and answers requests to enter from other CLIENTS while
|
|||
|
you are tied up somewhere else. Now this brings on all sorts of
|
|||
|
possibilities. You could send an AGENT to a conference in your place and
|
|||
|
it may respond to text as a human would, to gather data for you. For
|
|||
|
this reason and others, there is one strict rule, and that is that the
|
|||
|
default ASPECT of AGENTS are a white star made of three perpendicular
|
|||
|
axes.
|
|||
|
|
|||
|
Another example is to have several AGENTS that travel with you in unison
|
|||
|
and which have ASPECTS that fit into yours to make one larger, more
|
|||
|
impressive ASPECT.
|
|||
|
|
|||
|
One ASPECT detail that hasn't been mentioned is sound. Obviously a sound
|
|||
|
interface would be good (so you can talk to people you meet rather than
|
|||
|
just sending mail or typing stuff in during a private conference). Sound
|
|||
|
would be easy enough to implement into the SEND_MAIL message protocol
|
|||
|
(you get mail from someone who is in such and such a direction
|
|||
|
therefore the headphones position the sound source accordingly). But I
|
|||
|
would like to incorporate it into the ASPECT as well so you could hear
|
|||
|
someone comming, even if you were looking in the wrong direction.
|
|||
|
|
|||
|
Due to its complexity, however, sound ASPECT details will be left to
|
|||
|
future CT implementations.
|
|||
|
|
|||
|
Note: It's clear that this system is open to abuse to rogue CLIENTS that send
|
|||
|
invalid messages. Or AGENTS roaming around accruing PPS for their owner.
|
|||
|
Or worse still, AGENTS with the ID bits set to indicate it is a human,
|
|||
|
sent out to bother people etc. The buck will have to stop at the SERVER
|
|||
|
and so this program/system could end up being a pretty awesome beast as far
|
|||
|
as functionality goes. This is where the 'God' concept comes in. It could be
|
|||
|
implemented, for instance, to force collisions when OBJECTS are coincident,
|
|||
|
or to limit speed etc. This amount of control is only limited to the SERVER
|
|||
|
implementation. Some SECTORS may exist as lawless grottos where no-one is
|
|||
|
who they say they are and CLIENTS immitate you once they have your ID etc.
|
|||
|
Others SECTORS may be impecably realistic and well behaved (sort of like the
|
|||
|
difference between UNLAWFUL/EVIL and LAWFUL/GOOD in AD&D). This protocol
|
|||
|
allows for all such systems to work together.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SOFTWARE STATUS
|
|||
|
|
|||
|
The system so far has a CLIENT that connects to the LOCAL SERVER and
|
|||
|
allows the user to move around within their own SECTOR, requesting
|
|||
|
information on and displaying PERMASPACE objects that are already in the
|
|||
|
SERVER's object database. The default objects in the SERVER are 3D block
|
|||
|
representations of the directory structure of the hard disk and are created
|
|||
|
when the SERVER is initialised.
|
|||
|
|
|||
|
This is all done with solids polygons. Calculations are in floating point
|
|||
|
and are being modified to fixed point maths before any more work is done.
|
|||
|
The virtual line/modem links are implemented but not tested.
|
|||
|
|
|||
|
The first release of the software will not address display, interface or
|
|||
|
speed related problems. It will provide a simple base framework upon which
|
|||
|
others may build, knowing that whatever additions are made, they will still
|
|||
|
be able to connect to other users on other systems.
|
|||
|
|
|||
|
This system currently works on a PC and on a SUN (X11).
|
|||
|
|
|||
|
The graphics library used is VOGLE, but REND386 is being incorporated
|
|||
|
for 386 PCs. An Amiga version is in the works (mainly just requires the
|
|||
|
VOGLE driver). VOGLE is available from most ftp mirror archive sites, I got
|
|||
|
it from the Australian ftp mirror site, archie.au:/graphics/graphics/echidna
|
|||
|
|
|||
|
The nature of the system will be such that if you have a PC XT with
|
|||
|
hercules graphics then you can display only wire frame images at 1 frame per
|
|||
|
second (or whatever the software can manage). If you have an Indigo or
|
|||
|
similar then you are lucky enough to be able to display 30 frames a second,
|
|||
|
solid or rendered. The idea is that all the different systems will be able to be
|
|||
|
functionally connected together in a meaningful manner. If you have a full
|
|||
|
body suit, you get better integration into the cyberspace etc.
|
|||
|
|
|||
|
The code is in ANSI C. This system is ideal stuff for C++ but that would limit
|
|||
|
the platforms we could easily port to (and not enough people are comfortable
|
|||
|
with it yet).
|
|||
|
|
|||
|
SOFTWARE RELEASE
|
|||
|
|
|||
|
Initial software release is late December 1992, with possible beta releases
|
|||
|
before that (September/October). A mail list exists for those wishing to 1)
|
|||
|
receive the latest news on the system as it is released 2) those wishing
|
|||
|
to offer programming assistance, and 3) those who wish to receive the
|
|||
|
beta release. Just email me, requesting to be added to the list.
|
|||
|
|
|||
|
Michael Snoswell June 1st, 1992
|
|||
|
snoswell@sirius.ucs.adelaide.edu.au Revised July 17th, 1992
|
|||
|
|
|||
|
|
|||
|
|