-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTankClient.cs
More file actions
104 lines (88 loc) · 2.88 KB
/
TankClient.cs
File metadata and controls
104 lines (88 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using Agilix.Shared;
using Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TurboTank
{
public interface TankClient
{
dynamic Start();
dynamic TakeAction(TankAction move);
}
public class HttpTankClient : TankClient
{
private HttpClient client;
public string GameId;
public string PlayerId;
public string userId;
public HttpTankClient(string server, int port, string gameId, string userId)
{
this.userId = userId;
this.GameId = gameId;
this.client = new HttpClient(server, port);
}
public dynamic Start()
{
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("X-Sm-Playermoniker", userId);
dynamic joinResponse = client.GetJsonResponse("/game/" + GameId + "/join", "POST", "", headers);
PlayerId = headers["X-Sm-Playerid"];
return joinResponse;
}
public dynamic TakeAction(TankAction move)
{
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("X-Sm-Playerid", PlayerId);
return client.GetJsonResponse("/game/" + GameId + "/" + move.ToString().ToLower(), "POST", "", headers);
}
}
public class TestTankClient : TankClient
{
private DynObject startResponse;
private DynObject takeActionResponse;
private TankAction expectedAction;
public TestTankClient(DynObject startResponse, TankAction expectedAction, DynObject takeActionResponse = null)
{
this.expectedAction = expectedAction;
this.startResponse = startResponse;
if (takeActionResponse == null)
{
takeActionResponse = DynObject.Parse(@"{
'status': 'won',
'health': 200,
'energy': 10,
'orientation': 'north',
'grid': '________________________
___W_____WWWWWWWW_______
___W_W__________________
___W_W_______B__________
___W_W__________________
___W_W__________________
_WWWWWWWWW___L____O_____
_____W__________________
_____W_WWWWW____________
_________WWWWWWWW_______
________________________
___________WWWW_________
__X_____________________
________________________
____WWW_________________
________________________'
}");
}
this.takeActionResponse = takeActionResponse;
}
public dynamic Start()
{
return startResponse;
}
public dynamic TakeAction(TankAction move)
{
if ((move & expectedAction) == 0) throw new Exception("Got: " + move + ", expected: " + expectedAction);
return takeActionResponse;
}
}
}