All pastes #769845 Raw Edit

Untitled

public text v1 · immutable
#769845 ·published 2007-11-11 18:37 UTC
rendered paste body
Hybrid mode (aka grid of grids)

Eliminate the concept of a single authoritative centralized UGA by establshing
the web of trust of sims

Every sim runs their own local UGA, and separate UGA can be plugged in.

As soon as the hybrid mode is enabled, the sim starts exporting the assets via
the REST service.

Hybrid mode architecture
------------------------

Hybrid mode bases itself on the "local comms" infrastructure - since it is a
superset of the local comms functionality.


Hybrid teleport
---------------

First stage is the map lookup. In this stage, the user looks up the region in
the map, by putting in the URL of the region. The current sim performs the
REST GET request to the target URL, and retrieves the various parameters of
the target region - the local grid coordinates, the name, the map bitmap, and the UDP
communication parameters. This is the stage where the access permissions are
being checked - in case the "local" grid is not allowed to communicate withthe
"remote" grid, the error is returned. In case the permissions are ok, the
cookie is generated and included into the request. The cookie is dependant on
time, and the avatar being teleported - so that it is not possible to replay
the teleport and cause a DoS. At this stage the "remote" grid does not store
any information.

The map then shows to the user the location of the "transit region" - the
phantom region on the local grid, which is used as jumpstart points during
the teleports. 

Given that the "transit zone" is not necessarily the same on all the
sims/grids, there need to exist at least two of the transit regions on each
sim/grid to ensure the grid coordinates are always different between the
teleports.

Together with displaying the map of the transit region to the user, the
"local" transit region is informed about the upcoming teleport. Such, that when the
user arrives to the transit region, a second teleport is initiated
immediately, which moves the user off to the "foreign" grid.

When the second ("interdomain") teleport is initiated, the transit region 
informs the target region on the "remote" grid of the upcoming teleport, 
such that the transit region can prepare to receive the avatar.

Together with the teleport into the foreign grid, all of the current child
agent connection in the "local" grid are closed, hence the user is transferred
to the "remote" grid, which becomes their new "local" grid.



Logic flow
------------

0. The user sits in region A on the local grid, and wants to TP to region B on
the remote grid.

1. User brings up the map, pastes the URL

[home region A] === REST GET /sim/NameOfB ===> [ remote region B ]

                <=== reply ==================

[home region A]: find a suitable transit region X on the local grid


[home region A] === user X, transit to B == > [ home transit X ]

... time passes, or repeat (1) again ...

2. User clicks to TP to map coordinates of X

[home region A] 
RequestTeleportToLocation(local transit X)
  InformRegionOfChildAgent(local transit X) --->  .... --> OnExpectUser -> NewUserConnection(Scene.cs)
  ExpectAvatarCrossing(local transit X) ---> .... --> OnAvatarCrossingIntoRegion -> AgentCrossing

[home transit X]
in AgentCrossing:
  RequestTeleportToLocation(0): (special casing)
    retrieve the saved data about B, based on av UUID
      perform the teleport to remote sim