New API Class is working

This commit is contained in:
TheJoKlLa 2022-05-17 23:23:47 +02:00
parent ec48a8b993
commit 14552bf929
7 changed files with 62 additions and 65 deletions

View File

@ -37,6 +37,8 @@ namespace Borepin.PageModel
#region Data #region Data
public override Task LoadInstance(object instance) public override Task LoadInstance(object instance)
{
if(instance != null)
{ {
if (instance is ConnectionData) if (instance is ConnectionData)
{ {
@ -60,6 +62,11 @@ namespace Borepin.PageModel
{ {
DisplayAddress = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", _Connection_Item.Host.Host, _Connection_Item.Host.Port); DisplayAddress = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", _Connection_Item.Host.Host, _Connection_Item.Host.Port);
} }
}
if(instance == null && Connection_Item == null)
{
throw new InstanceIncorrectException();
}
IsBusy = false; IsBusy = false;
return Task.CompletedTask; return Task.CompletedTask;
@ -103,6 +110,7 @@ namespace Borepin.PageModel
if(_API.IsConnected) if(_API.IsConnected)
{ {
await _API.Disconnect().ConfigureAwait(true); await _API.Disconnect().ConfigureAwait(true);
_API.UnbindAllEvents();
} }
try try
@ -145,6 +153,7 @@ namespace Borepin.PageModel
public async Task DisonnectCommandExecute() public async Task DisonnectCommandExecute()
{ {
await _API.Disconnect().ConfigureAwait(false); await _API.Disconnect().ConfigureAwait(false);
_API.UnbindAllEvents();
await LoadInstance(Connection_Item).ConfigureAwait(false); await LoadInstance(Connection_Item).ConfigureAwait(false);
} }
@ -172,15 +181,18 @@ namespace Borepin.PageModel
{ {
if(string.Equals(result.Parameters.GetValue<string>("result"), "confirm", StringComparison.Ordinal)) if(string.Equals(result.Parameters.GetValue<string>("result"), "confirm", StringComparison.Ordinal))
{ {
ConnectionData connectionData = result.Parameters.GetValue<ConnectionData>("instance"); await _API.Disconnect().ConfigureAwait(true);
_API.UnbindAllEvents();
await _LoginStorageService.Remove(connectionData).ConfigureAwait(false); await _LoginStorageService.Remove(Connection_Item).ConfigureAwait(false);
Device.BeginInvokeOnMainThread(async () =>
{
INavigationResult result_nav = await _NavigationService.NavigateAsync("/MainPage/NavigationPage/ServerListPage").ConfigureAwait(false); INavigationResult result_nav = await _NavigationService.NavigateAsync("/MainPage/NavigationPage/ServerListPage").ConfigureAwait(false);
if (result_nav.Exception != null) if (result_nav.Exception != null)
{ {
Log.Fatal(result.Exception, "Navigating failed"); Log.Fatal(result.Exception, "Navigating failed");
} }
});
} }
} }
#endregion #endregion

View File

@ -4,7 +4,6 @@ using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Linq;
namespace Borepin.Service.Storage namespace Borepin.Service.Storage
{ {
@ -55,12 +54,12 @@ namespace Borepin.Service.Storage
} }
List<ConnectionData> connectionData_List = new List<ConnectionData>(await _LoadConnectionData().ConfigureAwait(false)); List<ConnectionData> connectionData_List = new List<ConnectionData>(await _LoadConnectionData().ConfigureAwait(false));
if (connectionData_List.Contains(connectionData)) if (!connectionData_List.Contains(connectionData))
{ {
throw new MissingConnectionException(connectionData); throw new MissingConnectionException(connectionData);
} }
connectionData_List.RemoveAll(x => x.Equals(connectionData)); connectionData_List.Remove(connectionData);
await _SaveConnectionData(connectionData_List).ConfigureAwait(false); await _SaveConnectionData(connectionData_List).ConfigureAwait(false);
} }
@ -72,14 +71,14 @@ namespace Borepin.Service.Storage
} }
List<ConnectionData> connectionData_List = new List<ConnectionData>(await _LoadConnectionData().ConfigureAwait(false)); List<ConnectionData> connectionData_List = new List<ConnectionData>(await _LoadConnectionData().ConfigureAwait(false));
if (connectionData_List.Contains(connectionData)) if (! connectionData_List.Contains(connectionData))
{ {
throw new MissingConnectionException(connectionData); throw new MissingConnectionException(connectionData);
} }
connectionData.LastTime = DateTime.UtcNow; connectionData.LastTime = DateTime.UtcNow;
connectionData_List.RemoveAll(x => x.Equals(connectionData)); connectionData_List.Remove(connectionData);
connectionData_List.Add(connectionData); connectionData_List.Add(connectionData);
await _SaveConnectionData(connectionData_List).ConfigureAwait(false); await _SaveConnectionData(connectionData_List).ConfigureAwait(false);
} }

View File

@ -1,30 +0,0 @@
using System;
using System.Threading.Tasks;
using NUnit.Framework;
using Borepin.Service.Storage;
using NSubstitute;
using Borepin.Service.BFFH;
using Borepin.Model;
namespace Borepin_Test
{
public class BFFHService_Test
{
[Test, Explicit]
public async Task Connect()
{
IPreferenceStorageService preferenceStorageService = Substitute.For<IPreferenceStorageService>();
ISecretStorageService secretStorageService = Substitute.For<ISecretStorageService>();
IBFFHService bffhService = new BFFHService(preferenceStorageService, secretStorageService);
Connection connection = new Connection()
{
Address = new Uri("fabaccess://127.0.0.1:59661"),
Username = "Testuser"
};
await bffhService.Connect(connection, "secret");
}
}
}

View File

@ -55,6 +55,17 @@ namespace FabAccessAPI
_TcpRpcClient = null; _TcpRpcClient = null;
} }
} }
public void UnbindAllEvents()
{
if(ConnectionStatusChanged != null)
{
foreach (Delegate d in ConnectionStatusChanged.GetInvocationList())
{
ConnectionStatusChanged -= (EventHandler<ConnectionStatusChange>)d;
}
}
}
#endregion #endregion
#region Members #region Members

View File

@ -16,13 +16,13 @@ namespace FabAccessAPI
if(obj is ConnectionData && obj != null) if(obj is ConnectionData && obj != null)
{ {
ConnectionData? data = obj as ConnectionData; ConnectionData? data = obj as ConnectionData;
return data.Host.Host == Host.Host && return data.Host.Host == Host.Host &&
data.Host.Port == Host.Port && data.Host.Port == Host.Port &&
data.Mechanism == Mechanism && data.Mechanism == Mechanism &&
data.Username == Username && data.Username == Username;
EqualityComparer<Dictionary<string, object>>.Default.Equals(Properties, data.Properties);
} }
return false; return false;
} }

View File

@ -33,6 +33,11 @@ namespace FabAccessAPI
/// </summary> /// </summary>
event EventHandler<ConnectionStatusChange> ConnectionStatusChanged; event EventHandler<ConnectionStatusChange> ConnectionStatusChanged;
/// <summary>
/// Unbind all Events from ConnectionStatus Change
/// </summary>
void UnbindAllEvents();
/// <summary> /// <summary>
/// Connect to BFFH Server /// Connect to BFFH Server
/// </summary> /// </summary>

@ -1 +1 @@
Subproject commit 086bbc2497785d2cc63e9252df6f6d3ee7599579 Subproject commit 0176a503c8d0b0be66e0212e04200c8324e11fd9