The Distributed VR Shopping Mall

written 28 Feb 2003 being revised May 2006

Google site search


1   Introduction        

A distributed VR shopping Mall is a system that acts as a Shopping Mall on the computer. The system consists of three servers that access a distributed database. The VR part of the project is the window dressing and is left as the second stage.

1.1   Rationale        

The rationale for this project is the same as that for a physical Mall. Many shops in the Mall sell the same products and also sell an additional group of products peculiar to the shop. Some shops sell only a subset of a wider range of products which fit the shops look. This means that shops can benefit from having a consolidated warehouse system that operates at a global level. In addition websales can be made all over the world and a world wide network of warehouses aids the delivery of sold goods. At the same time individual shops can use the same system to manage individual inventories of their own specialist products.

If a shop starts up or closes down, it has immediate access to a range of products from which it can choose to select and when it closes its product line simply merges with the world inventory of which it was already a part.

Once an e-shop gets more than a few thousand products, it becomes cumbersome for the shopper to negotiate and it is useful to split the shop into departments which more clearly identify the kinds of products for sale. Rather than create a department store look which creates a drab uniformity, groups of products can easily be placed in their own store as a collection of boutiques similar to a real Mall in which the shop design can attract a specific kind of customer. This kind of system is already in use in countries with large markets such as the US where a central warehouse system syndicates a small shop system to anyone, who then customises their shop and receives a commision on sales.

This structure is pretty much the same as that adopted by activeworlds for its virtual reality universe of worlds. The Mall is the equivalent of an activeworlds univers and the shop is the equivalent of a world within the universe.

When it comes to creating the VR Mall in activeworlds however, the Mall is implemented as a world and each shop as a building in that world.

1.2   Design Notation        

The design notation is a corrupted BNF.
italics indicates entities
::= describes a rule
bold indicates a primitive type
, indicates a compressed list of rules on the left hand side
entity* entity+ entity? indicate lists or optional occurences of the entity as per usual regexp notation

The rules are not to be interpreted as BNF grammar, but rather as a sketch for XML data descriptions. The mall create command would be something of the form:
mall create -name EROXXX -start -directory ./eroxxx -web sambar50 -vr dreamlands

1.3   The Mall Object        

The Mall consists of a webserver, the mall server, an active world and the mall data directory which is typically hosted on the same machine as the mall server.
mall ::= mall.ip web+ vr shop+
web ::= web.ip web.start web.domainname
vr ::= vr.ip vr.start ::= string # man readable name - malls do not know about each other or communicate with each other. there may only be one, if there are more than one they probably act in competition. The Mall gains its strength by acting in unison. ::= string # entity name for the web server. Each web server may be serving other things as well as the Mall. The Mall will typically be only one of many subdirectories taht the webserver delivers.
mall.ip, web.ip, vr.ip ::= permanent_ipaddress # typically the mall and web servers have the same ip address. The vr server may also have the same ip address depending on load, but in a fully developed system is likely to be seperate.,, ::= directory # directory names relative to their respective ip addresses per each server.
mall.start, web.start, vr.start ::= command # command to start each of the servers. The Mall server may have a deamon which monitors all three servers and automatically restarts them.
web.domainname ::= domainname # each shop may well have its own domain name, or it could exist as a subdirectory of the web domain ::= worldname # the name of the vr world under the vr startup world server.

Provision has been made for a list of web servers, though this may be unneeded complexity. There is no point in having multiple VR worlds as the VR worlds work better the more people they have in them. Dissipating the population into a number of VR worlds makes each world duller and increases demand on bandwidth as each customer visits more worlds.

1.3.1   Mall object Methods        

create - this is effectively an install. It creates the directory structure required for the rest of the system and prompts the user for the information required to create the subentities such as web servers. If the directory structure already exists the user is prompted to ask for a return to original settings or to leave as is or to amend. Create should be non-destructive. It should not destroy existing information without asking the user first.

destroy - this would only be required if the system is being migrated off an old machine and the old system destroyed to keep the siftware secure. It destroys all the directory structures associated with the Mall on the malls home machine - that is where the web and vr servers have the same ip address as the mall their directories are also destroyed. The Mall probbaly does not have authority to destroy webserver and world directories on other machines.

1.4   The Site Object        

The site is the window from which goods are sold. This window is a set of webpages (and possibly also a building in a VR world). Goods are sold at a price set by the shop, but which may be derived from warehouse cost prices. The goods are displayed if they are in stock in the warehouses from which this shop distributes.
shop ::= shop.status ::= string # The man readable name for the shop - this gets used in HTML TITLE and other text man readable places. ::+ directory # This is a simple string that names the child directory within the mall directory as in : $$ The name mall is reserved for the global mall files. shop.status ::= open | closed message # Status describes the status of the shop. If it is open then it displays webpages and functions normally . If it is closed then a webpage is issued with the c;osed message, also the VR shop will have performed a closue method so that the shop cannont be entered, again with a message on the doors.

1.4.1   Site Methods        

site create

A shop requires a lot of data to be provided:

Plus other page types particular to the shop. Some of these (probably all except the front page proc) will use common routines for:

shop destroy

shop open
shop close

1.5   Warehouse Object Class        

The warehouse may correspond to a physical shop, or to a more general warehouse. It is supposed to be a physical model of a real warehouse.

1.5.1   Warehouse Methods        

1.6   Supplier Object Class        

A supplier is an external supplier of product to the warehouses, possibly a manufacturer.

1.6.1   Supplier Methods        

1.6.2   Customer Object Class        

The customer is an important and complex object in the system. Within the webserver there is typically only one customer at a time, customers do not see each other and a transaction only ever deals with just one customer. In the VR server customers may interact with each other as well as with the environment.

One important part of the experience is that the customer can customise the look of the Mall to suit himself. Colors, fonts layout etc can be changed by the customer. To do this the page design needs to be totally functional and data removed to a customer webpage profile. This can be implemented as a cookie or as a db record. Even this can be left to the users choice. This effects the design and code writing for the whole system.

1.6.3   Site Structure   Index Page        

Within the site there is an index page which is the default entry page for the site. This is typically a unique and special page created by [proc foo/index]. As this is also the default page for the site people may leave off the index. To handle this include two procedures, foo and foo/. You may wish to preserve backward compatibility on users computers and websearch by also including proc foo/index.html or whatever other variant you may have used.
foreach i { foo foo/ foo/index foo/index.tcl foo/index.cgi } {
    proc $i args {
        return [ eval [ concat foo/index $args ]]
The site also makes use of other page display functions provided by the mall. A number of page display formats are available. Currently the mall provides for:
page - a general editorial format
gallery - a page with gallery images and random product display
gallerypic - a page with a single gallery image and random product display linked inside gallery.
Yet to implement - page2 - a 2 column page display with a single row of products

Other functions provided are

videopage - display a videodvd in a seperate page
There are also the purchase functions:
These are all public functions typically made available in the site by
proc foo/bar args {
    return [ eval [ concat bar site foo $args ]]

©2000 - 2006 WEBSCOOL This page last updated 27 May 2006. All rights reserved - including copying or distribution of any portion of this document in any form or on any medium without authorisation. For more regarding the copyright.