Geospatial data sharing and collaboration service.
Software
$ ./gradlew build publishToMavenLocal
$ cd wildfly-swarm
$ mvn clean package
To launch the server:
$ cd wildfly-swarm
$ java -jar target/wildfly-swarm-swarm.jar
To launch the Java client:
$ ./gradlew :mirrorcache-client:run
To launch the Web client:
visit: 127.0.0.1:8080/client
(NOTE: The Web client assumes a channel named 'inject' exists when performing certain functions.)
To view server state:
visit: 127.0.0.1:8080/status.html
Endpoint | Description |
---|---|
ws://127.0.0.1:8080/mirrorcache | All clients interested in participating in MirrorCache message exchanges must connect to this endpoint. Only ProtoMessage objects are recognized. |
Endpoint | Description |
---|---|
/rest/status | This endpoint returns the current state of the system. Returned data currently includes all active WebSocket sessions, all created channels, all created channelGroups, and outbound queues sizes. |
/rest/channels | This endpoint returns a listing of channels currently available. |
/rest/channelgroups | This endpoint returns a listing of channelGroups currently avaialble. |
/rest/queues | This endpoint returns detailed information about each outbound queue. |
/rest/cache/channel | This endpoint returns detailed information about each channel cache. |
/rest/cache/channelgroup | This endpoint returns detailed information about each channelGroup cache. |
/rest/cache/entity | This endpoint returns detailed information about each cached entity. |
A ProtoMessage is a Protocol Buffer defined type. It is declared as follows:
message ProtoMessage {
string id = 1;
map<string, string> property = 2;
int32 priority = 3;
OneOfOperation operation = 4;
ProtoPayload payload = 5;
}
A channel represents the path message data travels through. A client can open a channel and produce or consume message data (or both) on it by specificying a flow pattern. Once a channel has been opened data can be published to it or consumed from it.
Channel Types:
Type | Description |
---|---|
TEMPORARY | A temporary channel will exist only while the owning client is still connected. |
PERSISTENT | A persistent channel will remain available until it has been explicitly deleted. |
Channel Visibility:
Visibility | Description |
---|---|
PUBLIC | A public channel is made available for any other client to discover and subscribe to. |
PRIVATE | A private channel can only be discovered and subscribed to after being invited. |
Channel Flow:
Flow | Description |
---|---|
INGRESS | An ingress flow denotes a client who is only interested in consuming messages. |
EGRESS | An egress flow denotes a client who is only interested in producing messages. |
BOTH | A both flow denotes a client interested in producing and consuming. |
A ChannelGroup represents a collection of channels. Clients who open a channelGroup will receive published data from each channel participating in the channelGroup. The owner of a channelGroup can publish data to the channelGroup, this has the effect of broadcasting data to each participating channel in the channelGroup. A channelGroup will persist until the owning session is closed.
Operation | Properties |
---|---|
GET_CLIENT_INFO |
|
CREATE_CHANNEL |
|
CREATE_CHANNEL |
|
DELETE_CHANNEL |
|
FIND_CHANNELS |
|
CHANNEL_OPEN |
|
CHANNEL_CLOSE |
|
CHANNEL_PUBLISH |
|
CHANNEL_DELETE |
|
CHANNEL_CACHE |
|
CHANNEL_HISTORY |
|
CREATE_CHANNELGROUP |
|
DELETE_CHANNELGROUP |
|
FIND_CHANNELGROUPS |
|
CHANNELGROUP_OPEN |
|
CHANNELGROUP_CLOSE |
|
CHANNELGROUP_ADD_CHANNEL |
|
CHANNELGROUP_REMOVE_CHANNEL |
|
CHANNELGROUP_PUBLISH |
|
CHANNELGROUP_DELETE |
|
CHANNELGROUP_CACHE |
|
CHANNELGROUP_HISTORY |
|
MirrorCacheProductManager
Manages the list(s) of overlays that are created as products, or feeds.
MirrorCacheCollaborationManager
Manages all the different sessions being used for collaboration. Each collaboration session is essentially a map with numerous overlays, a shared camera, and a list of connected users.
MirrorCacheStorage
Similar to EMP core Storage Manager where it has a store of all the unique data elements and understands all their relationships.
ClientMessageQueue
When messages the user is subscribed to are processed, the result will be inserted in a first in, first out queue. If an update occurs on a piece of data that was already in the queue, that item remains in the same queue position, but has the latest update applied. Because it will likely just be a reference to the actual item in the MirrorCacheStorage, not much needs to happen to client queue if it finds that the updated item already exists in the queue.
MirrorCacheClient
Stores the endpoint, name, uuid, DateTime connected, reference to its ClientMessageQueue, and other user related attributes.
Apache 2.0