-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a638fe1
commit 25654c0
Showing
12 changed files
with
75 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
--- | ||
title: "Squall" | ||
menu: | ||
main: | ||
weight: 3 | ||
parent: "Components" | ||
|
||
--- | ||
|
||
Squall is the component which makes it possible to sync media from the server to the client. | ||
|
||
### Requirements | ||
|
||
Since we had a couple of extra requirements we didn't want to just use basic file transfers for syncing media. The main | ||
requirements we had were: | ||
|
||
* Allow the client to connect to different servers, each with slightly different media. The idea here is that we provide | ||
base media, and then will let servers extend this with their own media. Thus we envision that a lot of the media will | ||
be similar. So for example, a client would connect to two different servers, which share 90% of common assets. These | ||
common assets wouldn't need to be re-downloaded. | ||
* Have a built in mechanism for when assets are updated. This ties in to the vision we have about a development loop | ||
where the world is created inside a running server, without the need to restart the server. To accomplish this we need | ||
a good way to inform the client about changed assets. Whenever something changes the client should download the | ||
changed asset only. | ||
* Use simple and tested existing file transfer mechanisms. Such as HTTP. We want to make it simple to expose assets | ||
using a basic file server. | ||
|
||
### Design | ||
|
||
All of these requirements led to the design of Squall. It borrows ideas from both Git and BitTorrent, in the sense that | ||
all assets are represented by hashes of their content. This also goes for directories. | ||
|
||
An effect of this is that a client only needs to download any hashes that it's missing. Thus fulfilling requirement #1. | ||
|
||
Since directories also are computed using hashes of their content, any change to an assets will resonate to all its | ||
parent directories and in the end to the root directory. Thus every change will result in a new hash for the root, which | ||
can be commnuicated to the client. Thus fulfilling requirement #2. | ||
|
||
And since we only need to expose data attached to hashes it's easy to serve data using a standard file server. Thus | ||
fulfilling requirement #3. | ||
|
||
### Stand alone library | ||
|
||
The Squall library is licensed under the MIT license, with the hope that it might find use outside of Worldforge. While | ||
it's contained in the monorepo it's also possible to build standalone. | ||
|
||
### Source | ||
|
||
The source for Squall is available at [Github](https://github.com/worldforge/worldforge/tree/master/libs/squall). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,84 +1,21 @@ | ||
--- | ||
title: "Building from source" | ||
menu: | ||
main: | ||
weight: 5 | ||
parent: "Develop" | ||
main: | ||
weight: 5 | ||
parent: "Develop" | ||
|
||
--- | ||
|
||
{{< imgresize screenshot_20140628_150933.jpg "360x360" "A wireframe view" "float:right; padding: 5px;">}} | ||
|
||
If you're interested in helping out with the code, or just want to try the latest version, you should build from source. | ||
Since Worldforge is made up of a lot of different components it's often cumbersome and confusing for new developers to | ||
get everything built in order. For that reason we provide a build tool we call Hammer which we strongly recommend that | ||
you use. It will download and build all necessary components. This page provides guidelines and help with building the | ||
whole of Worldforge from source. | ||
|
||
### Get access to a Linux system. | ||
|
||
The core WorldForge system runs on Linux, MacOSX and Windows, and may well run on other unix like systems, but getting | ||
involved in development is easiest if you are working on Linux, as that is the platform of choice of most of our | ||
developers. This is not to say you must develop on Linux. We have developers who primarily use other systems, but life | ||
is much easier if every developer at least has access to a Linux system to check stuff on. Most of the WorldForge C++ | ||
code uses standard GNU tools like autoconf and automake to manage the build, so it helps to be familiar with these. Any | ||
up to date Linux distro should be fine. The best thing to do is get Linux installed on a machine you own, so you have | ||
admin rights, and can work around any minor issues. It does not need to be your main desktop or laptop machine, and in | ||
many ways your Linux system will not even need to have a monitor attached, as you can do almost everything by logging in | ||
remotely. | ||
|
||
### Fetch code and build. | ||
|
||
The Worldforge project contains a large number of libraries and clients, which can be confusing for a newcomer. To | ||
alleviate this we provide a script which will automatically fetch and build all the needed libraries used by Worldforge, | ||
as well as the Cyphesis server and the Ember and Sear clients. This method is very much preferred for any new developer, | ||
as it oftentimes can be time consuming to get all of the different libraries built in the correct order. Instructions on | ||
how to use Hammer can be found [here](http://wiki.worldforge.org/wiki/Hammer_Script). | ||
If you are impatient, here are the basic steps needed for building and running both the Cyphesis server and the Ember | ||
client locally | ||
|
||
git clone git://github.com/worldforge/hammer.git | ||
cd hammer | ||
./hammer.sh install-deps all | ||
./hammer.sh checkout all | ||
./hammer.sh build all | ||
./work/local/bin/cyphesis& | ||
./work/local/bin/ember | ||
|
||
However, if you want to fetch and compile everything yourself we provide the instructions for this below. | ||
|
||
### Get the code | ||
|
||
We host all of our code on [Github](https://github.com/worldforge) | ||
|
||
### Build and install the libraries. | ||
|
||
Developers and users are encouraged to install WorldForge libraries from the binary packages available from our download | ||
pages, or as part of many Linux distributions. As a developer, you should find this the best and easiest way to keep up | ||
to date with the libraries, and help us test the packages. | ||
|
||
However, building all the libraries from git source will provide an invaluable opportunity to learn how the WorldForge | ||
system is put together. The libraries should be built in the following order, but feel free to change this order if you | ||
want to find out how the dependencies work. | ||
|
||
* [Atlas-C++](/components/atlas-cpp) | ||
* [Varconf](/components/varconf) | ||
* [WFMath](/components/wfmath) | ||
* [Mercator](/components/mercator) | ||
* [Eris](/components/eris) | ||
* [Worlds](/components/worlds) | ||
|
||
The [components section](/components) has details of what these libraries do, and you should make yourself familiar with | ||
their roles. | ||
|
||
### Build the Ember client | ||
All the code needed to run a server or a client is available in | ||
our [main monorepo](https://github.com/worldforge/worldforge). | ||
|
||
The [Ember](/components/ember) client is the main client used both for playing the game as well as authoring the world. | ||
The main dependencies that you might need to install yourself are [Ogre3D](http://www.ogre3d.org/) | ||
and [CEGUI](http://www.cegui.org.uk/). | ||
There are instructions available on how to setup dependencies through Conan, and how to build the various components. | ||
|
||
### Build and install a WorldForge server. | ||
### Get other code | ||
|
||
The [Cyphesis](/components/cyphesis) server is the main game play server. Instructions for building from source are | ||
available in the README file in the source directory, and on its page on the website. It is easiest to build and run on | ||
Linux, but has also been tested on MacOSX and on Windows using [MingW](http://www.mingw.org/). Once you have it | ||
installed and running, try connecting to it using Ember. | ||
We host all of our code on [Github](https://github.com/worldforge). While most features can be found in the main | ||
monorepo we also have a couple of other repositories containing code that might be of interest. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters