https://github.com/sidmishraw/scriptwars
Script Wars ∩༼˵☯‿☯˵༽つ¤=[]:::::>
https://github.com/sidmishraw/scriptwars
java8 javascript multi-agent nashorn nashorn-engine scriptwars transport
Last synced: about 2 months ago
JSON representation
Script Wars ∩༼˵☯‿☯˵༽つ¤=[]:::::>
- Host: GitHub
- URL: https://github.com/sidmishraw/scriptwars
- Owner: sidmishraw
- Created: 2017-09-12T03:54:38.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-09-14T05:31:33.000Z (over 8 years ago)
- Last Synced: 2025-03-04T20:43:20.932Z (over 1 year ago)
- Topics: java8, javascript, multi-agent, nashorn, nashorn-engine, scriptwars, transport
- Language: Java
- Size: 29.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Scriptwars
#
# ∩༼˵☯‿☯˵༽つ¤=[]:::::>
Author: Sidharth Mishra << sidmishraw@gmail.com >>
## Motivation(?)
Just for Fun! Jk
To check out the ways we can stream/transport compute in distributed/multi-agent networks (?)
Personally, I use it for fun lol!
This application simulates a way of transporting compute over the network. The scriptwar consists of a HTTP webserver.
The game has 2 contexts `/attack` and `/receive`.
**AND**
The server has 2 contexts `/serialize` and `/deserialize`.
## `/attack`
The `/attack` context is used to submit the attack to the opponent via a POST request. It takes the `host` and `port` of the agent to attack as `x-www-form-urlencoded` parameters. The attack's damage is computed from the js script used while starting the game!
## `/receive`
The `/receive` context is used to receive the attack from the opponent via a POST request. If the your HP drops below `0`, your game ends and the application ends.
## JS Script template
The js file named warscript is the template that needs to be modified. It needs the `computeDamage` function. Please do not modify the function signature. The body of the function is actually what needs to be modified to do the damage.
Have fun!
## Samples:
Agent#1
```
sidmishraw@Sidharths-MBP ~/Desktop> java -jar scriptwars.jar localhost 3030 warscript.js
Host:: localhost :: Port :: 3030
Receiving attack from :: /receive
Computing damage!
Damage received:: 100.0
Your HP:: 270.7929315264443
Computing the attack
Attacking agent at :: localhost:3050
Initiating attack...
Logging:: Attack object :: StandardLambdaObject [objectId=Sid#0001, lambdaJSScript=/** * `computeDamage` is the function that specifies the damage to be dealt to the * opponent. The `baseDamage` and `randomMultiplier` are mandatory and are set * randomly when the script executes. * * To print stuff or display messages, you can use `println()` or `print()` * * @param baseDamage * the baseDamage of the attack, a double * @param randomMultiplier * the random multiplier that can be used in the attack, a double * * @return the computed damage, a double */var computeDamage = function (baseDamage, randomMultiplier) { print("Computing damage!"); return 150.0;};]
Awaiting response...
Attack stats :: Attack succeeded, damage dealt :: 150.0
```
Agent#2
```
sidmishraw@Sidharths-MBP ~/Desktop> java -jar scriptwars.jar localhost 3050 warscript2.js
Host:: localhost :: Port :: 3050
Computing the attack
Attacking agent at :: localhost:3030
Initiating attack...
Logging:: Attack object :: StandardLambdaObject [objectId=Sid#0001, lambdaJSScript=/** * `computeDamage` is the function that specifies the damage to be dealt to the * opponent. The `baseDamage` and `randomMultiplier` are mandatory and are set * randomly when the script executes. * * To print stuff or display messages, you can use `println()` or `print()` * * @param baseDamage * the baseDamage of the attack, a double * @param randomMultiplier * the random multiplier that can be used in the attack, a double * * @return the computed damage, a double */var computeDamage = function (baseDamage, randomMultiplier) { print("Computing damage!"); return 100.0;};]
Awaiting response...
Attack stats :: Attack succeeded, damage dealt :: 100.0
Receiving attack from :: /receive
Computing damage!
Damage received:: 150.0
Your HP:: 643.106388567504
```
## For Simulations of transporting compute::
### `/serialize`
The `/serialize` context takes in a POST request with 2 form-url-encoded params "host" and "port". These are the hostname and port of the next agent/java process running the scriptwar application(jar).
This context/API endpoint, will create the object and assign the JS script contents(lambda replacement) into the object and serialize and wire it to the agent with the `host` and `port` provided. It then waits till the receiving agent replies back.
### `/deserialize`
The `/deserialize` context receives the serialized object wired to it, and executes the JS script(lamda replacement) and then returns a success response if everything went well else does it's usual thingy :D
## Usage:
For the simulation, start up 2 separate java processes like
Agent#1
```
java -jar scriptwars.jar localhost 3030 lamda.js
```
Agent#2
```
java -jar scriptwars.jar localhost 3050 l2.js
```
Then using Postman client, hit the URL "http://localhost:3030/serialize" using a POST request and "host=localhost", "port=3050" as form-url-encoded params.
It will execute the contents of the script `lamda.js` at Agent#2 and vice versa.
## Generic usage
```
java -jar scriptwars.jar
```
- Sid