diff --git a/MConnectSDK/MConnectClient.cs b/MConnectSDK/MConnectClient.cs
index 1dbbe8c..3889bb4 100644
--- a/MConnectSDK/MConnectClient.cs
+++ b/MConnectSDK/MConnectClient.cs
@@ -20,6 +20,14 @@ namespace MConnectSDK
{
#region oggetti base ed init
+ ///
+ /// Semaforo ping PRELIMINARE
+ ///
+ protected bool pingOk = false;
+ ///
+ /// Semaforo controllo CLOUD PRELIMINARE
+ ///
+ protected bool cloudOk = false;
///
/// Oggetto accesso memoria...
/// {ext}
@@ -443,7 +451,8 @@ namespace MConnectSDK
// ORA verifica STATO sistema A VALLE...
// STEP 1: PING a server (locale/remoto)
- bool pingOk = false;
+ pingOk = false;
+ cloudOk = false;
if (PingTarget != "")
{
pingOk = Utils.pingAddress(PingTarget);
@@ -458,6 +467,7 @@ namespace MConnectSDK
{
answ.CloudStatusOk = true;
answ.Source = SourceType.CLOUD;
+ cloudOk = true;
}
}
answ.CallResultOk = (answ.CloudStatusOk || answ.LocalStatusOk);
@@ -507,14 +517,19 @@ namespace MConnectSDK
Uri callUri = new Uri(BaseUrl + "/oauth2/token");
var payload = "{\"client_id\": \"test\"}";
HttpContent callCont = new StringContent(payload, Encoding.UTF8, "application/json");
- // effettuo call effettiva
- var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
- taskRes.Wait();
- // decodifico risposta come tokResp...
- var resp = JsonConvert.DeserializeObject(taskRes.Result);
- waitRecall = 1000 * resp.interval;
- tokResp = resp;
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
+ {
+ // effettuo call effettiva
+ var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
+ taskRes.Wait();
+
+ // decodifico risposta come tokResp...
+ var resp = JsonConvert.DeserializeObject(taskRes.Result);
+ waitRecall = 1000 * resp.interval;
+ tokResp = resp;
+ }
}
///
/// Effetuo step 3: /verification
@@ -526,36 +541,40 @@ namespace MConnectSDK
{
// SOLO SE ho un device code...
if (tokResp != null && tokResp.device_code != "")
- {
- // parametri chiamata
- Uri callUri = new Uri(BaseUrl + "/oauth2/verification");
- var payload = "{\"client_id\": \"test\", \"device_code\": \"" + tokResp.device_code + "\"}";
- HttpContent callCont = new StringContent(payload, Encoding.UTF8, "application/json");
- // effettuo call effettiva
- var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
- taskRes.Wait();
-
- // leggo la rispsota in var temporanea...
- var resp = JsonConvert.DeserializeObject(taskRes.Result);
- // verifico se esista un errore come risposta...
- if (resp != null)
+ {
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
{
- // se è stato autorizzato...
- if (resp.error == "")
+ // parametri chiamata
+ Uri callUri = new Uri(BaseUrl + "/oauth2/verification");
+ var payload = "{\"client_id\": \"test\", \"device_code\": \"" + tokResp.device_code + "\"}";
+ HttpContent callCont = new StringContent(payload, Encoding.UTF8, "application/json");
+ // effettuo call effettiva
+ var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
+ taskRes.Wait();
+
+ // leggo la rispsota in var temporanea...
+ var resp = JsonConvert.DeserializeObject(taskRes.Result);
+ // verifico se esista un errore come risposta...
+ if (resp != null)
{
- var authResp = JsonConvert.DeserializeObject(taskRes.Result);
- verifResp = authResp;
- // blocco richiesta verifica
- var currReq = reqStatus;
- currReq.IsAuth = true;
- answ = true;
- reqStatus = currReq;
- }
- else
- {
- // resp.error == "slow_down"
- // resp.error == "authorization_pending"
- Thread.Sleep(waitRecall);
+ // se è stato autorizzato...
+ if (resp.error == "")
+ {
+ var authResp = JsonConvert.DeserializeObject(taskRes.Result);
+ verifResp = authResp;
+ // blocco richiesta verifica
+ var currReq = reqStatus;
+ currReq.IsAuth = true;
+ answ = true;
+ reqStatus = currReq;
+ }
+ else
+ {
+ // resp.error == "slow_down"
+ // resp.error == "authorization_pending"
+ Thread.Sleep(waitRecall);
+ }
}
}
}
@@ -676,34 +695,37 @@ namespace MConnectSDK
{
// se ho il TOKEN di accesso procedo
if (verifResp.access_token != "")
- {
- // provo a chiamare clientInfo...
-
- string pageUrl = $"{BaseUrl}/oauth2/clientinfo?access_token={verifResp.access_token}";
-
- var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
- taskRes.Wait();
- rawResult = taskRes.Result;
- tokenRefreshed = checkFixToken(rawResult);
- if (tokenRefreshed)
+ {
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
{
- taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
+ // provo a chiamare clientInfo...
+ string pageUrl = $"{BaseUrl}/oauth2/clientinfo?access_token={verifResp.access_token}";
+
+ var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
taskRes.Wait();
rawResult = taskRes.Result;
tokenRefreshed = checkFixToken(rawResult);
- currReq.CloudStatusOk = true;
- }
-
- // ORA se NON HA + fatto refresh --> procedo!
- if (!tokenRefreshed)
- {
- // salvo il client info...
- var cliResp = JsonConvert.DeserializeObject(taskRes.Result);
- if (cliResp != null)
+ if (tokenRefreshed)
{
- clientInfoResp = cliResp;
+ taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
+ taskRes.Wait();
+ rawResult = taskRes.Result;
+ tokenRefreshed = checkFixToken(rawResult);
currReq.CloudStatusOk = true;
}
+
+ // ORA se NON HA + fatto refresh --> procedo!
+ if (!tokenRefreshed)
+ {
+ // salvo il client info...
+ var cliResp = JsonConvert.DeserializeObject(taskRes.Result);
+ if (cliResp != null)
+ {
+ clientInfoResp = cliResp;
+ currReq.CloudStatusOk = true;
+ }
+ }
}
}
reqStatus = currReq;
@@ -747,15 +769,19 @@ namespace MConnectSDK
Uri callUri = new Uri(BaseUrl + "/oauth2/refresh");
var payload = "{\"refresh_token\": \"" + verifResp.refresh_token + "\"}";
HttpContent callCont = new StringContent(payload, Encoding.UTF8, "application/json");
- // effettuo call effettiva
- var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
- taskRes.Wait();
- // decodifico risposta come authResp...
- var authResp = JsonConvert.DeserializeObject(taskRes.Result);
- // se OK salvo e sovrascrivo...
- verifResp = authResp;
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
+ {
+ // effettuo call effettiva
+ var taskRes = Task.Run(() => Utils.postUriAsync(callUri, callCont));
+ taskRes.Wait();
+ // decodifico risposta come authResp...
+ var authResp = JsonConvert.DeserializeObject(taskRes.Result);
+ // se OK salvo e sovrascrivo...
+ verifResp = authResp;
+ }
}
///
@@ -778,14 +804,17 @@ namespace MConnectSDK
// se ho il TOKEN di accesso procedo
if (verifResp.access_token != "")
{
- // provo a chiamare clientInfo...
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
+ {
+ // provo a chiamare clientInfo...
+ string pageUrl = $"{BaseUrl}/oauth2/clientinfo?access_token={verifResp.access_token}";
- string pageUrl = $"{BaseUrl}/oauth2/clientinfo?access_token={verifResp.access_token}";
+ var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
+ taskRes.Wait();
- var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl));
- taskRes.Wait();
-
- string outVal = taskRes.Result;
+ string outVal = taskRes.Result;
+ }
}
}
});
@@ -852,9 +881,14 @@ namespace MConnectSDK
Uri callUri = new Uri(pageUrlCheckEnroll);
var payload = "";
HttpContent callCont = new StringContent(payload, Encoding.UTF8, "application/json");
- var taskRes = Task.Run(() => Utils.putAsync(callUri, callCont, verifResp.access_token));
- taskRes.Wait();
- answ = taskRes.Result;
+
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
+ {
+ var taskRes = Task.Run(() => Utils.putAsync(callUri, callCont, verifResp.access_token));
+ taskRes.Wait();
+ answ = taskRes.Result;
+ }
return answ;
}
///
@@ -862,27 +896,30 @@ namespace MConnectSDK
/// {ext}
protected bool checkEnroll()
{
- bool answ = false;
-
- // controllo con la chiamata della clientInfo...
- var taskCliInfo = Task.Run(() => GetClientStatusAsync());
- taskCliInfo.Wait();
- // effettuo lettura verifica...
- var taskRes = Task.Run(() => Utils.getPageAsync(pageUrlCheckEnroll, verifResp.access_token));
- taskRes.Wait();
- var rawResult = taskRes.Result;
- // leggo la risposta...
- var resp = JsonConvert.DeserializeObject(taskRes.Result);
- if (resp != null)
+ bool answ = false;
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
{
- enrollResp = resp;
- var currStatus = reqStatus;
- if (resp.result != null && (resp.result.OrganizationCode.ToUpper() == organizationCode.ToUpper()))
+ // controllo con la chiamata della clientInfo...
+ var taskCliInfo = Task.Run(() => GetClientStatusAsync());
+ taskCliInfo.Wait();
+ // effettuo lettura verifica...
+ var taskRes = Task.Run(() => Utils.getPageAsync(pageUrlCheckEnroll, verifResp.access_token));
+ taskRes.Wait();
+ var rawResult = taskRes.Result;
+ // leggo la risposta...
+ var resp = JsonConvert.DeserializeObject(taskRes.Result);
+ if (resp != null)
{
- // registro che è OK x AUTH
- currStatus.IsHmiEnrolled = true;
- answ = true;
- reqStatus = currStatus;
+ enrollResp = resp;
+ var currStatus = reqStatus;
+ if (resp.result != null && (resp.result.OrganizationCode.ToUpper() == organizationCode.ToUpper()))
+ {
+ // registro che è OK x AUTH
+ currStatus.IsHmiEnrolled = true;
+ answ = true;
+ reqStatus = currStatus;
+ }
}
}
return answ;
@@ -1001,129 +1038,132 @@ namespace MConnectSDK
/// {ext}
private List userListMConnect(bool getImages = false)
{
- // salvo VECCHIO elenco utenti...
- List userListOld = userListCache;
- // gestisco numero utenti precedentemente importati... e trovati nella nuova call da cloud
- var elImported = userListOld.FindAll(X => X.LoginStatus == UserStatus.IMPORTED);
- int numImp = elImported.Count;
- int numFound = 0;
// continuo da remoto
List answ = new List();
List resFilt = new List();
- // controllo con la chiamata della clientInfo...
- var taskCliInfo = Task.Run(() => GetClientStatusAsync());
- taskCliInfo.Wait();
-
- // parametri chiamata...SENZA /api...
- string shortBaseUrl = BaseUrl.Replace("/api", "");
-
- string pageUrl = $"{shortBaseUrl}/clients/{organizationCode}/users?skip=0&limit=5";
- // effettuo call PRELIMINARE
- var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl, verifResp.access_token));
- taskRes.Wait();
- var rawResult = taskRes.Result;
- // leggo la risposta in var temporanea...
- var resp = JsonConvert.DeserializeObject(rawResult);
-
- // ora che so quanti utenti ho --> chiedo TUTTI!
- pageUrl = $"{shortBaseUrl}/clients/{organizationCode}/users?skip=0&limit={resp.total}";
- // effettuo call EFFETTIVA
- taskRes = Task.Run(() => Utils.getPageAsync(pageUrl, verifResp.access_token));
- taskRes.Wait();
- rawResult = taskRes.Result;
- // leggo la risposta in var temporanea...
- resp = JsonConvert.DeserializeObject(rawResult);
- // salvo in cache REDIS
- usrListResp = resp;
- UserData _newUser;
- Image userImg = null;
- UserStatus currStatus = UserStatus.NOT_IMPORTED;
- // recupero effettivi dati utente e restituisco...
- foreach (var item in resp.result)
+ // controllo preliminare ping/cloud..
+ if (pingOk && cloudOk)
{
- // verifica SE FOSSE GIA' esistente --> tengo STATUS...
- resFilt = userListOld.FindAll(X => X.Username == item.Username);
- if (resFilt.Count > 0)
- {
- currStatus = resFilt[0].LoginStatus;
- if (currStatus == UserStatus.IMPORTED)
- {
- numFound++;
- }
- }
- else
- {
- currStatus = UserStatus.NOT_IMPORTED;
- }
- // creo utente
- _newUser = new UserData
- {
- UserId = item.Id,
- IsAdmin = item.IsAdmin,
- Username = item.Username,
- Email = item.Email,
- Cognome = item.Lastname,
- Nome = item.Firstname,
- LoginStatus = currStatus,
- UserImage = userImg
- };
- answ.Add(_newUser);
- }
+ // salvo VECCHIO elenco utenti...
+ List userListOld = userListCache;
+ // gestisco numero utenti precedentemente importati... e trovati nella nuova call da cloud
+ var elImported = userListOld.FindAll(X => X.LoginStatus == UserStatus.IMPORTED);
+ int numImp = elImported.Count;
+ int numFound = 0;
+ // controllo con la chiamata della clientInfo...
+ var taskCliInfo = Task.Run(() => GetClientStatusAsync());
+ taskCliInfo.Wait();
- // se ne avessi ricevuti (da cloud) meno di quanti ne avevo --> cerco DELETED...
- if (numFound != numImp)
- {
- // cerco nei "vecchi" imported chi sia stato eliminato...
- foreach (var item in elImported)
+ // parametri chiamata...SENZA /api...
+ string shortBaseUrl = BaseUrl.Replace("/api", "");
+
+ string pageUrl = $"{shortBaseUrl}/clients/{organizationCode}/users?skip=0&limit=5";
+ // effettuo call PRELIMINARE
+ var taskRes = Task.Run(() => Utils.getPageAsync(pageUrl, verifResp.access_token));
+ taskRes.Wait();
+ var rawResult = taskRes.Result;
+ // leggo la risposta in var temporanea...
+ var resp = JsonConvert.DeserializeObject(rawResult);
+
+ // ora che so quanti utenti ho --> chiedo TUTTI!
+ pageUrl = $"{shortBaseUrl}/clients/{organizationCode}/users?skip=0&limit={resp.total}";
+ // effettuo call EFFETTIVA
+ taskRes = Task.Run(() => Utils.getPageAsync(pageUrl, verifResp.access_token));
+ taskRes.Wait();
+ rawResult = taskRes.Result;
+ // leggo la risposta in var temporanea...
+ resp = JsonConvert.DeserializeObject(rawResult);
+ // salvo in cache REDIS
+ usrListResp = resp;
+ UserData _newUser;
+ Image userImg = null;
+ UserStatus currStatus = UserStatus.NOT_IMPORTED;
+ // recupero effettivi dati utente e restituisco...
+ foreach (var item in resp.result)
{
- resFilt = answ.FindAll(X => X.Username == item.Username);
- if (resFilt.Count == 0)
+ // verifica SE FOSSE GIA' esistente --> tengo STATUS...
+ resFilt = userListOld.FindAll(X => X.Username == item.Username);
+ if (resFilt.Count > 0)
{
- // creo utente
- _newUser = new UserData
+ currStatus = resFilt[0].LoginStatus;
+ if (currStatus == UserStatus.IMPORTED)
{
- UserId = item.UserId,
- IsAdmin = item.IsAdmin,
- Username = item.Username,
- Email = item.Email,
- Cognome = item.Cognome,
- Nome = item.Nome,
- LoginStatus = UserStatus.DELETED,
- UserImage = userImg
- };
- answ.Add(_newUser);
- }
- }
- }
-
- // se richiesto aggiungo immagine...
- if (getImages)
- {
- // in modalità parallela TENTO scaricamento imagini...
- Parallel.ForEach(resp.result, item =>
- {
- userImg = null;
- try
- {
- // creo obj userData... SE HO immagine...
- if (item.Image_Url != "")
- {
- var imgRes = Task.Run(() => Utils.getImageAsync(pageUrlImgDownload, item.Image_Url));
- imgRes.Wait();
- if (imgRes.Result != null)
- {
- userImg = imgRes.Result;
- }
+ numFound++;
}
}
- catch
+ else
{
+ currStatus = UserStatus.NOT_IMPORTED;
}
- resFilt = answ.FindAll(X => X.Username == item.Username);
- if (resFilt.Count == 1)
+ // creo utente
+ _newUser = new UserData
{
- resFilt[0].UserImage = userImg;
+ UserId = item.Id,
+ IsAdmin = item.IsAdmin,
+ Username = item.Username,
+ Email = item.Email,
+ Cognome = item.Lastname,
+ Nome = item.Firstname,
+ LoginStatus = currStatus,
+ UserImage = userImg
+ };
+ answ.Add(_newUser);
+ }
+
+ // se ne avessi ricevuti (da cloud) meno di quanti ne avevo --> cerco DELETED...
+ if (numFound != numImp)
+ {
+ // cerco nei "vecchi" imported chi sia stato eliminato...
+ foreach (var item in elImported)
+ {
+ resFilt = answ.FindAll(X => X.Username == item.Username);
+ if (resFilt.Count == 0)
+ {
+ // creo utente
+ _newUser = new UserData
+ {
+ UserId = item.UserId,
+ IsAdmin = item.IsAdmin,
+ Username = item.Username,
+ Email = item.Email,
+ Cognome = item.Cognome,
+ Nome = item.Nome,
+ LoginStatus = UserStatus.DELETED,
+ UserImage = userImg
+ };
+ answ.Add(_newUser);
+ }
}
+ }
+
+ // se richiesto aggiungo immagine...
+ if (getImages)
+ {
+ // in modalità parallela TENTO scaricamento imagini...
+ Parallel.ForEach(resp.result, item =>
+ {
+ userImg = null;
+ try
+ {
+ // creo obj userData... SE HO immagine...
+ if (item.Image_Url != "")
+ {
+ var imgRes = Task.Run(() => Utils.getImageAsync(pageUrlImgDownload, item.Image_Url));
+ imgRes.Wait();
+ if (imgRes.Result != null)
+ {
+ userImg = imgRes.Result;
+ }
+ }
+ }
+ catch
+ {
+ }
+ resFilt = answ.FindAll(X => X.Username == item.Username);
+ if (resFilt.Count == 1)
+ {
+ resFilt[0].UserImage = userImg;
+ }
#if false
// verifica SE FOSSE GIA' esistente --> tengo STATUS...
@@ -1155,8 +1195,8 @@ namespace MConnectSDK
answ.Add(_newUser);
#endif
});
+ }
}
-
return answ;
}
@@ -1521,10 +1561,15 @@ namespace MConnectSDK
/// {ext}
private void updateUserListCacheFromCloud(bool getImages = false)
{
- // se NON modalità testing LEGGO davvero da cloud la NUOVA lista
- List answ = userListMConnect(getImages);
- // salvo in cache locale (comunque...)
- userListCache = answ;
+ try
+ {
+ // se NON modalità testing LEGGO davvero da cloud la NUOVA lista
+ List answ = userListMConnect(getImages);
+ // salvo in cache locale (comunque...)
+ userListCache = answ;
+ }
+ catch
+ { }
}
///
diff --git a/MConnectSDK/Utils.cs b/MConnectSDK/Utils.cs
index 13e1c9f..0bb3982 100644
--- a/MConnectSDK/Utils.cs
+++ b/MConnectSDK/Utils.cs
@@ -22,12 +22,17 @@ namespace MConnectSDK
{
bool answ = false;
Ping pingSender = new Ping();
- PingReply reply = pingSender.Send(target, 100);
- // se passa il ping do OK...
- if (reply.Status == IPStatus.Success)
+ try
{
- answ = true;
+ PingReply reply = pingSender.Send(target, 100);
+ // se passa il ping do OK...
+ if (reply.Status == IPStatus.Success)
+ {
+ answ = true;
+ }
}
+ catch
+ { }
return answ;
}
///