[73] | 1 | from abc import ABC, abstractmethod
|
---|
| 2 | from datetime import datetime
|
---|
| 3 | from pyson.JsonSubTypes import JsonSubTypes
|
---|
| 4 | from pyson.JsonTypeInfo import JsonTypeInfo, Id, As
|
---|
| 5 |
|
---|
| 6 | @JsonTypeInfo(use = Id.NAME, include = As.WRAPPER_OBJECT)
|
---|
| 7 | @JsonSubTypes([ "geniusweb.progress.ProgressTime.ProgressTime", "geniusweb.progress.ProgressRounds.ProgressRounds"] )
|
---|
| 8 | class Progress(ABC):
|
---|
| 9 | '''
|
---|
| 10 | Progress is similar to {@link Deadline} but contains absolute values. It
|
---|
| 11 | always contains a hard termination moment at which the party should be
|
---|
| 12 | killed. This is used to free up the run server. The protocol should always
|
---|
| 13 | check its own clock, as parties may be ignoring or cheating with the
|
---|
| 14 | deadline.
|
---|
| 15 | <p>
|
---|
| 16 | immutable.
|
---|
| 17 |
|
---|
| 18 | '''
|
---|
| 19 | @abstractmethod
|
---|
| 20 | def get(self,currentTimeMs:int)->float:
|
---|
| 21 | '''
|
---|
| 22 | @param currentTimeMs the current time in ms since 1970 as from
|
---|
| 23 | {@link System#currentTimeMillis()}.
|
---|
| 24 | @return the current time as a fraction of the total amount of time/rounds
|
---|
| 25 | available. So at start this returns 0, and when (and after) the
|
---|
| 26 | deadline is reached this returns 1. Notice that when the progress
|
---|
| 27 | is about the number of rounds, the party may also want to keep an
|
---|
| 28 | eye on {@link #getTerminationTime()}.
|
---|
| 29 | '''
|
---|
| 30 |
|
---|
| 31 | @abstractmethod
|
---|
| 32 | def getTerminationTime(self)->datetime :
|
---|
| 33 | '''
|
---|
| 34 | @return the unix time (UTC, ms since 1970) at which the party will be
|
---|
| 35 | terminated. At this time the server can remove the party and free
|
---|
| 36 | up its resources. Notice that server and party implementations
|
---|
| 37 | are free to ignore this, the protocol should always check on
|
---|
| 38 | whether a party is out of time.
|
---|
| 39 | '''
|
---|
| 40 |
|
---|
| 41 | @abstractmethod
|
---|
| 42 | def isPastDeadline(self, currentTimeMs:int) -> bool:
|
---|
| 43 | '''
|
---|
| 44 | @param currentTimeMs the current time in ms since 1970 as from
|
---|
| 45 | {@link System#currentTimeMillis()}.
|
---|
| 46 | @return true iff the progress has passed the deadline.
|
---|
| 47 | '''
|
---|