diff --git a/Eqn.Sender/Controllers/fbmsController.cs b/Eqn.Sender/Controllers/fbmsController.cs index 420ab1c..5cd5e49 100644 --- a/Eqn.Sender/Controllers/fbmsController.cs +++ b/Eqn.Sender/Controllers/fbmsController.cs @@ -76,6 +76,14 @@ namespace Eqn.Sender.Controllers return answ; } + [HttpPost("sendTopic")] + public async Task SendTopic([FromBody] MsgPayload rawData) + { + string answ = await DoSendTopic(rawData); + // restituisco esito... + return answ; + } + [HttpPost("test")] public async Task Test(int numTest = 10, int numParall = 1, bool dryRun = true) { @@ -136,6 +144,14 @@ namespace Eqn.Sender.Controllers return answ; } + [HttpPost("topicUnsub")] + public async Task TopicUnsubs([FromBody] TopicPayload rawData) + { + string answ = await TopicUnsubTokens(rawData.tokenList, rawData.topic); + // restituisco esito... + return answ; + } + #endregion Public Methods #region Private Fields @@ -157,7 +173,9 @@ namespace Eqn.Sender.Controllers /// /// Dati payload /// Indica se ritornare per intero il messaggio firebase - /// Indica se mettere delay causale 15-25 ms tra ogni send (deault true) + /// + /// Indica se mettere delay causale 15-25 ms tra ogni send (deault true) + /// /// Booleano: true = Android / false=iOS /// Num max di token x singolo invio FireBase /// Parallelismo send ammesso @@ -239,8 +257,7 @@ namespace Eqn.Sender.Controllers } messageList.Add(newMessage); } - int iter = 0; - int bDelay = 30; + int bDelay = 60; List listBResp = new List(); if (numParall > 1) { @@ -250,9 +267,8 @@ namespace Eqn.Sender.Controllers // eventuale delay se richiesto if (doDelay) { - await Task.Delay(bDelay * iter + rnd.Next(10, 30)); + await Task.Delay(rnd.Next(0, bDelay)); } - iter++; Stopwatch lsw = new Stopwatch(); var currData = new BStatData(); lsw.Start(); @@ -262,11 +278,6 @@ namespace Eqn.Sender.Controllers currData.Size = message.Tokens.Count; currData.TimeSec = lsw.Elapsed.TotalSeconds; elapsedTime.Add(currData); - // eventuale delay se richiesto - if (doDelay) - { - await Task.Delay(bDelay * iter + rnd.Next(10, 30)); - } }); } else @@ -276,9 +287,8 @@ namespace Eqn.Sender.Controllers // eventuale delay se richiesto if (doDelay) { - await Task.Delay(bDelay * iter + rnd.Next(10, 30)); + await Task.Delay(rnd.Next(0, bDelay)); } - iter++; Stopwatch lsw = new Stopwatch(); var currData = new BStatData(); lsw.Start(); @@ -288,11 +298,6 @@ namespace Eqn.Sender.Controllers currData.Size = item.Tokens.Count; currData.TimeSec = lsw.Elapsed.TotalSeconds; elapsedTime.Add(currData); - // eventuale delay se richiesto - if (doDelay) - { - await Task.Delay(bDelay * iter + rnd.Next(10, 30)); - } } } sw.Stop(); @@ -315,7 +320,7 @@ namespace Eqn.Sender.Controllers if (sw.Elapsed.TotalSeconds > 5) { int numSend = elapsedTime.Count; - string logVal = $"Warnng soglia, durata: {sw.Elapsed.TotalSeconds:N3} sec | chiamate: {numCall} | batch: {numSend}"; + string logVal = $"Warning soglia, durata: {sw.Elapsed.TotalSeconds:N3} sec | chiamate: {numCall} | batch: {numSend}"; _logger.LogWarning(logVal); // scrivo tutte le righe int idx = 1; @@ -335,6 +340,54 @@ namespace Eqn.Sender.Controllers return answ; } + /// + /// Funzione di invio messaggi a topic + /// + /// Dati payload + /// + private async Task DoSendTopic(MsgPayload rawData) + { + string answ = ""; + Stopwatch sw = new Stopwatch(); + sw.Start(); + StringBuilder sb = new StringBuilder(); + // preparo messaggio al topic + Message newMessage = new Message() + { + Data = rawData.varData + , + Topic = rawData.topic + }; + var currData = new BStatData(); + answ = await fbService.TopicSend(newMessage); + sw.Stop(); + string logVal = $"Invio a topic {rawData.topic} | durata: {sw.Elapsed.TotalSeconds:N3} sec"; + _logger.LogWarning(logVal); + + return answ; + } + + /// + /// Funzione di rimoziione token da topic + /// + /// elenco token da rimuovere + /// topic da cui rimuovere + /// + private async Task TopicUnsubTokens(List tokenList, string topic) + { + string answ = ""; + Stopwatch sw = new Stopwatch(); + sw.Start(); + var currData = new BStatData(); + var resp = await fbService.TopicUnsub(tokenList, topic); + answ = JsonConvert.SerializeObject(resp, Formatting.Indented); + sw.Stop(); + string logVal = $"Rimozione da topic {topic} | num token: {tokenList.Count} | durata: {sw.Elapsed.TotalSeconds:N3} sec"; + _logger.LogWarning(logVal); + + return answ; + } + #endregion Private Methods } } \ No newline at end of file diff --git a/Eqn.Sender/Eqn.Sender.csproj b/Eqn.Sender/Eqn.Sender.csproj index 1a6cc0c..cd00047 100644 --- a/Eqn.Sender/Eqn.Sender.csproj +++ b/Eqn.Sender/Eqn.Sender.csproj @@ -1,7 +1,7 @@ net6.0 - 1.0.2405.1715 + 1.0.2405.1810 enable enable 352f62a7-3b7d-40cd-ab21-b55a5fefae44 diff --git a/Eqn.Sender/MsgPayload.cs b/Eqn.Sender/MsgPayload.cs index e1c0a53..0cd4e2b 100644 --- a/Eqn.Sender/MsgPayload.cs +++ b/Eqn.Sender/MsgPayload.cs @@ -11,6 +11,7 @@ public string notifySound { get; set; } = "default"; public int secTTL { get; set; } = 3600; public string title { get; set; } = "body"; + public string topic { get; set; } = ""; public List tokenList { get; set; } = new List(); public Dictionary varData { get; set; } = new Dictionary(); diff --git a/Eqn.Sender/Services/FireBaseService.cs b/Eqn.Sender/Services/FireBaseService.cs index 1a2279a..0f27d67 100644 --- a/Eqn.Sender/Services/FireBaseService.cs +++ b/Eqn.Sender/Services/FireBaseService.cs @@ -51,16 +51,16 @@ namespace Eqn.Sender.Services BatchResponse answ = await fbMServ.SendEachForMulticastAsync(message, dryRun); return answ; } + /// - /// Restituisce UserRecord dato num telefonico + /// Restituisce NomeApp /// - /// /// - public async Task GetUserByNumber(string phoneNumber) + public string GetAppInfo() { - UserRecord userRec = await fbAuth.GetUserByPhoneNumberAsync(phoneNumber); - return userRec; + return fbApp.Name; } + /// /// Restituisce UserRecord dato email /// @@ -73,14 +73,38 @@ namespace Eqn.Sender.Services } /// - /// Restituisce NomeApp + /// Restituisce UserRecord dato num telefonico /// + /// /// - public string GetAppInfo() + public async Task GetUserByNumber(string phoneNumber) { - return fbApp.Name; + UserRecord userRec = await fbAuth.GetUserByPhoneNumberAsync(phoneNumber); + return userRec; } + /// + /// Disiscrive dal topic un elenco di token destinatari + /// + /// Elenco token interessati + /// Topic da disiscrivere + /// + public async Task TopicUnsub(List tokenList, string topic) + { + TopicManagementResponse answ = await fbMServ.UnsubscribeFromTopicAsync(tokenList, topic); + return answ; + } + + /// + /// Invia una notifica ad un topic (e quindi ai device i cui token sono sottoscritti) + /// + /// Messaggio da inviare + /// + public async Task TopicSend(Message message) + { + string answ = await fbMServ.SendAsync(message); + return answ; + } #endregion Public Methods diff --git a/Eqn.Sender/TopicPayload.cs b/Eqn.Sender/TopicPayload.cs new file mode 100644 index 0000000..1844d24 --- /dev/null +++ b/Eqn.Sender/TopicPayload.cs @@ -0,0 +1,12 @@ +namespace Eqn.Sender +{ + public class TopicPayload + { + #region Public Properties + + public string topic { get; set; } = ""; + public List tokenList { get; set; } = new List(); + + #endregion Public Properties + } +} \ No newline at end of file diff --git a/Resources/ChangeLog.html b/Resources/ChangeLog.html index 1b7fe9f..90a8136 100644 --- a/Resources/ChangeLog.html +++ b/Resources/ChangeLog.html @@ -1,6 +1,6 @@ EqnSender - Gestione invio messaggi piattaforma EQN -

Versione: 1.0.2405.1715

+

Versione: 1.0.2405.1810


Note di rilascio:
  • diff --git a/Resources/VersNum.txt b/Resources/VersNum.txt index 4b968cb..c0e22cc 100644 --- a/Resources/VersNum.txt +++ b/Resources/VersNum.txt @@ -1 +1 @@ -1.0.2405.1715 +1.0.2405.1810 diff --git a/Resources/manifest.xml b/Resources/manifest.xml index 49dd604..0761d37 100644 --- a/Resources/manifest.xml +++ b/Resources/manifest.xml @@ -1,6 +1,6 @@ - 1.0.2405.1715 + 1.0.2405.1810 http://nexus.steamware.net/repository/SWS/EqnSender/stable/0/EqnSender.zip http://nexus.steamware.net/repository/SWS/EqnSender/stable/0/ChangeLog.html false