Skip to content

Commit 80c565a

Browse files
committed
Refactored and restructured package into stateless DresWrapper and stateful DresClient classes.
1 parent 2b062bd commit 80c565a

File tree

5 files changed

+79
-55
lines changed

5 files changed

+79
-55
lines changed
Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,25 @@
11
using System.Threading.Tasks;
2-
using Org.Vitrivr.DresApi.Api;
3-
using Org.Vitrivr.DresApi.Client;
42
using Org.Vitrivr.DresApi.Model;
5-
using UnityEngine;
6-
using UnityEngine.Serialization;
73

84
namespace Vitrivr.UnityInterface.DresApi
95
{
10-
public class DresClient : MonoBehaviour
6+
/// <summary>
7+
/// Instantiable class to contain all client functionality for the DRES API.
8+
/// Holds all state information for a DRES user.
9+
/// </summary>
10+
public class DresClient
1111
{
12-
public DresConfig dresConfig;
12+
public UserDetails UserDetails;
1313

14-
public UserApi UserService;
15-
public LogApi LoggingService;
16-
public SubmissionApi SubmissionService;
17-
18-
public string session; // Could be private
19-
20-
21-
private async void Start()
22-
{
23-
dresConfig = ConfigManager.Instance.Config;
24-
UserService = new UserApi(ConfigManager.Instance.ApiConfiguration);
25-
LoggingService = new LogApi(ConfigManager.Instance.ApiConfiguration);
26-
SubmissionService = new SubmissionApi(ConfigManager.Instance.ApiConfiguration);
27-
await Login(dresConfig.user, dresConfig.password);
28-
Debug.Log($"Login gave Session: {session}");
29-
}
30-
31-
public async Task Login(string user, string pw)
14+
public async Task Login()
3215
{
33-
var loginRequest = new LoginRequest(user, pw);
34-
var userDetails = await UserService.PostApiLoginAsync(loginRequest);
35-
session = userDetails.SessionId;
16+
var config = DresConfigManager.Instance.Config;
17+
UserDetails = await DresWrapper.Login(config.user, config.password);
3618
}
3719

38-
public async Task SubmitResult(string item, int frame)
20+
public async Task<SuccessfulSubmissionsStatus> SubmitResult(string item, int frame)
3921
{
40-
var submitStatus = await SubmissionService.GetSubmitAsync(collection: null, item: item,
41-
frame: frame, session: session);
42-
Debug.Log(submitStatus);
22+
return await DresWrapper.Submit(item, frame, UserDetails.SessionId);
4323
}
4424
}
4525
}

Runtime/Scripts/Vitrivr/UnityInterface/DresApi/ConfigManager.cs renamed to Runtime/Scripts/Vitrivr/UnityInterface/DresApi/DresConfigManager.cs

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,78 +5,80 @@
55

66
namespace Vitrivr.UnityInterface.DresApi
77
{
8-
public class ConfigManager
8+
public class DresConfigManager
99
{
1010
public const string FileName = "dresapi";
1111
public const string CredentialsName = "credentials";
1212
public const string FileExtension = "json";
13-
public const string ConfigFile = FileName +"."+FileExtension;
13+
public const string ConfigFile = FileName + "." + FileExtension;
1414
public const string CredentialsFile = CredentialsName + "." + FileExtension;
1515

16-
private static ConfigManager _instance;
16+
private static DresConfigManager _instance;
1717

18-
public static ConfigManager Instance => _instance ?? (_instance = new ConfigManager());
18+
public static DresConfigManager Instance => _instance ?? (_instance = new DresConfigManager());
1919

20-
private ConfigManager()
20+
private DresConfigManager()
2121
{
2222
apiConfig = new Configuration {BasePath = Config.Endpoint};
2323
}
2424

25-
private DresConfig config;
25+
private DresConfig _config;
2626

2727
public DresConfig Config
2828
{
2929
get
3030
{
31-
if (config != null)
31+
if (_config != null)
3232
{
33-
return config;
33+
return _config;
3434
}
35-
35+
3636
if (File.Exists(GetFilePath(ConfigFile)))
3737
{
3838
var streamReader = File.OpenText(GetFilePath(ConfigFile));
3939
var json = streamReader.ReadToEnd();
4040
streamReader.Close();
41-
config = DresConfig.GetDefault();
42-
JsonUtility.FromJsonOverwrite(json, config);
41+
_config = DresConfig.GetDefault();
42+
JsonUtility.FromJsonOverwrite(json, _config);
4343
}
4444
else
4545
{
46-
config = DresConfig.GetDefault();
46+
_config = DresConfig.GetDefault();
4747
}
4848

49-
if (!config.HasCredentials())
49+
if (!_config.HasCredentials())
5050
{
5151
if (!File.Exists(GetFilePath(CredentialsFile)))
5252
{
5353
throw new FileNotFoundException("Expects a credentials file at " + GetFilePath(CredentialsFile));
5454
}
55+
5556
var streamReader = File.OpenText(GetFilePath(CredentialsFile));
5657
var json = streamReader.ReadToEnd();
5758
streamReader.Close();
5859
var cred = JsonUtility.FromJson<Credentials>(json);
59-
config.user = cred.username;
60-
config.password = cred.password;
60+
_config.user = cred.username;
61+
_config.password = cred.password;
6162
}
62-
return config;
63+
64+
return _config;
6365
}
64-
set => config = value;
66+
set => _config = value;
6567
}
6668

6769
public void StoreConfig()
6870
{
69-
var user = config.user;
70-
var password = config.password;
71-
config.user = null;
72-
config.password = null;
71+
var user = _config.user;
72+
var password = _config.password;
73+
_config.user = null;
74+
_config.password = null;
7375
var sw = File.CreateText(GetFilePath(ConfigFile));
74-
sw.Write(JsonConvert.SerializeObject(config));
76+
sw.Write(JsonConvert.SerializeObject(_config));
7577
sw.WriteLine(""); // empty line at EOF
7678
sw.Flush();
7779
sw.Close();
78-
config.user = user;
79-
config.password = password;
80+
_config.user = user;
81+
_config.password = password;
8082
}
8183

8284
private Configuration apiConfig;

Runtime/Scripts/Vitrivr/UnityInterface/DresApi/ConfigManager.cs.meta renamed to Runtime/Scripts/Vitrivr/UnityInterface/DresApi/DresConfigManager.cs.meta

File renamed without changes.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using Org.Vitrivr.DresApi.Api;
3+
using Org.Vitrivr.DresApi.Model;
4+
5+
namespace Vitrivr.UnityInterface.DresApi
6+
{
7+
/// <summary>
8+
/// Class wrapping all of the DRES REST APIs functionality.
9+
/// Using this class ensures only a single instance of each endpoint is created.
10+
///
11+
/// This class is held deliberately stateless (no session ID etc.) to allow multi-user scenarios in the future.
12+
/// </summary>
13+
public static class DresWrapper
14+
{
15+
public static readonly LogApi LogApi = new LogApi(DresConfigManager.Instance.ApiConfiguration);
16+
public static readonly StatusApi StatusApi = new StatusApi(DresConfigManager.Instance.ApiConfiguration);
17+
public static readonly SubmissionApi SubmissionApi = new SubmissionApi(DresConfigManager.Instance.ApiConfiguration);
18+
public static readonly UserApi UserApi = new UserApi(DresConfigManager.Instance.ApiConfiguration);
19+
20+
public static async Task<UserDetails> Login(string user, string password)
21+
{
22+
var loginRequest = new LoginRequest(user, password);
23+
return await UserApi.PostApiLoginAsync(loginRequest);
24+
}
25+
26+
public static async Task<SuccessfulSubmissionsStatus> Submit(string item, int frame, string session)
27+
{
28+
return await SubmissionApi.GetSubmitAsync(item: item, frame: frame, session: session);
29+
}
30+
}
31+
}

Runtime/Scripts/Vitrivr/UnityInterface/DresApi/DresWrapper.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)