[43] | 1 | package geniusweb.party;
|
---|
| 2 |
|
---|
| 3 | import geniusweb.actions.Action;
|
---|
| 4 | import geniusweb.connection.Connectable;
|
---|
| 5 | import geniusweb.connection.ConnectionEnd;
|
---|
| 6 | import geniusweb.inform.Inform;
|
---|
| 7 |
|
---|
| 8 | /**
|
---|
| 9 | * This is a interface definition for java-based party implementations that are
|
---|
| 10 | * to be run on the PartiesServer.
|
---|
| 11 | *
|
---|
| 12 | * To implement a party to run on the PartiesServer, you must implement this and
|
---|
| 13 | * also have a 0-arg constructor. Also we strongly recommend not to use any
|
---|
| 14 | * static code blocks or do anything serious in the constructor. Instances of
|
---|
| 15 | * your class may also be created only to call the getCapabilities function.
|
---|
| 16 | *
|
---|
| 17 | * <h2>Short outline</h2> After the party is created (empty constructor) it is
|
---|
| 18 | * first connected through a call to connect (from the {@link Connectable}
|
---|
| 19 | * interface). The party can subscribe to receive {@link Inform} objects using
|
---|
| 20 | * {@link ConnectionEnd#addListener(tudelft.utilities.listener.Listener)}. The
|
---|
| 21 | * party can also send its actions using {@link ConnectionEnd#send(Object)}.
|
---|
| 22 | *
|
---|
| 23 | * The {@link ConnectionEnd} allows the party to receive Inform objects and send
|
---|
| 24 | * action objects.
|
---|
| 25 | *
|
---|
| 26 | * Incoming Inform objects (eg "Settings" containing the profile, and
|
---|
| 27 | * "yourturn") are notified to the party throught he notifyChange() call to the
|
---|
| 28 | * party.
|
---|
| 29 | * <p>
|
---|
| 30 | * Outgoing Action objects (eg "Offer") are sent using the send() command.
|
---|
| 31 | *
|
---|
| 32 | * Most parties extend {@link DefaultParty} to handle these connection details.
|
---|
| 33 | * <p>
|
---|
| 34 | * Technical details: normally a Party will be spawned inside a PartiesFactory,
|
---|
| 35 | * and incoming/outgoing calls are routed through a websocket there. But in
|
---|
| 36 | * testing the Connectable is often mocked.
|
---|
| 37 | *
|
---|
| 38 | */
|
---|
| 39 | public interface Party extends Connectable<Inform, Action> {
|
---|
| 40 |
|
---|
| 41 | /**
|
---|
| 42 | * @return the capabilities of this party.
|
---|
| 43 | */
|
---|
| 44 | Capabilities getCapabilities();
|
---|
| 45 |
|
---|
| 46 | /**
|
---|
| 47 | *
|
---|
| 48 | * @return some useful short description, eg "tit-for-tat with bayesian
|
---|
| 49 | * opponent modeling".
|
---|
| 50 | */
|
---|
| 51 | String getDescription();
|
---|
| 52 |
|
---|
| 53 | /**
|
---|
| 54 | * When this is called, the party must free up all its claimed resources
|
---|
| 55 | * (memory, CPU, files, etc) immediately. This call can come in at any time
|
---|
| 56 | * (when a negotiation is aborted early), even while your party is still
|
---|
| 57 | * working on something else. Other parties for the next session may be
|
---|
| 58 | * started within a few seconds after this request to your party. The exact
|
---|
| 59 | * time is decided by the partyserver you use but typically 2 seconds. Not
|
---|
| 60 | * respecting this call and continue using the system resources will
|
---|
| 61 | * deteriorate performance of other parties running on the same machine,
|
---|
| 62 | * which may be against the assignment/competition rules.
|
---|
| 63 | */
|
---|
| 64 | void terminate();
|
---|
| 65 | }
|
---|