OpenNel pyManager project
=========================

This projects does aim to make tools to manipulate the MMORPG Khanat.

Khanat is open source and released under the terms of the GNU Affero General Public License 3.0 (GNU/AGPLv3) for the source code and the Creative Commons Attributions-ShareAlike 3.0 (CC-BY-SA) for the art assets. Which means you can create your own game using Khanat OpenNel, for more information on doing so check out Creating Your Own Game Using Khanat OpenNel.


https://khaganat.net/wikhan/fr:collabo_pymanager

Master:
[![pipeline status](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/badges/master/pipeline.svg)](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/commits/master)
[![coverage report](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/badges/master/coverage.svg)](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/commits/master)


Develop:
[![pipeline status](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/badges/develop/pipeline.svg)](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/commits/develop)
[![coverage report](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/badges/develop/coverage.svg)](https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/commits/develop)


Prepare our environment
=======================

# Install

    apt-get install python3 python3-setuptools python3-virtualenv python3-stdeb python3-all python3-coverage python3-pep8 python3-sphinx python3-pip graphviz python3-bcrypt
    apt-get install autogen autoconf automake fakeroot

# Check

    cd opennel-pymanager
    make

# Source package

    cd opennel-pymanager
    make sdist
    # result at
    ls dist/pymanager-*.tar.gz

# Python package

    cd opennel-pymanager
    make bdist
    # result at
    ls dist/pymanager-*.tar.gz

# Wheel package

    cd opennel-pymanager
    make bdist_wheel
    # result at
    ls dist/pymanager-*.whl

# Test

    cd opennel-pymanager
    make test

# Coverage

    cd opennel-pymanager
    make coverage
    # result at
    ls docs/coverage/

# Generate Html Documentation :

    cd opennel-pymanager
    make htmldoc
    # result at 
    ls docs/build/

# Debian package:

    cd opennel-pymanager
    make builddeb
    # result at 
    ls ../python3-opennel-pymanager_*_all.deb

Example:
=======================

# Clone

``` sh
    git clone https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager.git
    cd opennel-pymanager
    git checkout develop
```

# Create workdir

``` sh
    mkdir temp
    cd temp
```

# Create certificat

``` sh
    ../pymanager/certificate.py
```

# Server Configuration

Example configuration with TLS1.2.
We have two program (one command:sleep -> stop after 10s, command:simulate -> daemon (emulate khanat process)

``` sh
cat << EOF > server.cfg
[config:server]
port = 8000
keyfile = ca/appli/private/serverkey.pem
certfile = ca/appli/certs/servercert.pem
ca_cert = ca/appli/certs/cachaincert.pem
authentification = no
[command:sleep]
command = sleep 10
[command:simulate]
command = ../tests/simulate_program.py
EOF
```

# Client Configuration
``` sh
cat << EOF > client.cfg
[config:client]
port = 8000
keyfile = ca/appli/private/clientkey.pem
certfile = ca/appli/certs/clientcert.pem
ca_cert = ca/appli/certs/cachaincert.pem
address = localhost
EOF
```

# Start Manager
``` sh
../pymanager/manager.py -c server.cfg --log DEBUG
```
if you want, you can launch like deamon

``` sh
nohup ../pymanager/manager.py -c server.cfg --log DEBUG &
```

# Launch command (with client)

## STATUS
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STATUS
```
## START
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command START
```
## STATUS
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STATUS
```
## STDIN
Send command
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STDIN --stdin="help all"
```
## STDOUT
Read output
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STDOUT
```
## STOP
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STOP
```
## STARTALL
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STARTALL
```
## STATUSALL
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STATUSALL
```
## STOPALL
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command STOPALL
```
## WITH CURL
```sh
curl -k --tlsv1.2 --cacert ca/appli/certs/cachaincert.pem --cert ca/appli/certs/clientcert.pem --key ca/appli/private/clientkey.pem -XGET "https://localhost:8000/STATUSALL"
```
```sh
curl -k --tlsv1.2 --cacert ca/appli/certs/cachaincert.pem --cert ca/appli/certs/clientcert.pem --key ca/appli/private/clientkey.pem --header "content-type: application/json"  -d '{"name": "command:simulate"}' -XGET "https://localhost:8000/STATUS"
```
## SHUTDOWN
``` sh
../pymanager/client.py -c client.cfg --log DEBUG --program 'command:simulate' --command SHUTDOWN
```