Newer
Older
import (
"bytes"
"encoding/json"
"fmt"
"log"
"math/rand"
"net/http"
rad "gitlab.utc.fr/gvandevi/ia04binome2a"
cs "gitlab.utc.fr/gvandevi/ia04binome2a/comsoc"
)
id string
url string
scrutin string
nbAlts int
prefs []int
options []int
func NewRestClientAgent(id string, url string, scrutin string, nbAlts int, prefs []int, options []int) *RestClientAgent {
return &RestClientAgent{id, url, scrutin, nbAlts, prefs, options}
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
func (rca *RestClientAgent) vote() (err error) {
req := rad.Vote{
AgentID: rca.id,
BallotID: rca.scrutin,
Prefs: rca.prefs,
Options: rca.options,
}
// sérialisation de la requête
url := rca.url + "/vote"
data, _ := json.Marshal(req)
// envoi de la requête
resp, err := http.Post(url, "application/json", bytes.NewBuffer(data))
// traitement de la réponse
if err != nil {
return
}
if resp.StatusCode != http.StatusOK {
err = fmt.Errorf("[%d] %s", resp.StatusCode, resp.Status)
return
}
return
}
func (rca *RestClientAgent) Start() {
log.Printf("démarrage de %s", rca.id)
prefs := make([]cs.Alternative, 0)
if len(rca.prefs) == 0 {
prefs = cs.GenerateProfile(1, rca.nbAlts)[0]
rca.prefs = make([]int, len(prefs))
for i, pref := range prefs {
rca.prefs[i] = int(pref)
}
}
if len(rca.options) == 0 {
rca.options = []int{1 + rand.Intn(rca.nbAlts-1)}
}