using System;
using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Interop;
using H.Formatters;
using H.Pipes;
using H.Pipes.Extensions;
using InABox.Integration.Logikal;
using Newtonsoft.Json;
namespace PRSLogikal
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow
{
private LogikalServer _server;
private LogikalListener _listener;
private void Log(string msg)
{
Dispatcher.BeginInvoke(new Func(() => _Log.Text += $"{msg}\n"));
}
public MainWindow()
{
InitializeComponent();
}
private void MainWindow_OnClosed(object sender, EventArgs e)
{
if (bClosing)
{
_listener.Stop();
_server.Disconnect();
}
}
private void _connect_OnClick(object sender, RoutedEventArgs e)
{
var _request = new LogikalConnectRequest(_path.Text );
var _response = _server.Connect(_request);
Log($"Connect(): {_response}");
if (_response is LogikalConnectResponse)
{
_connect.IsEnabled = false;
_path.IsEnabled = false;
_disconnect.IsEnabled = true;
_login.IsEnabled = true;
_userid.IsEnabled = true;
_password.IsEnabled = true;
_logout.IsEnabled = false;
_projects.IsEnabled = false;
}
}
private void _login_OnClick(object sender, RoutedEventArgs e)
{
var _request = new LogikalLoginRequest();
var _response = _server.Login(_request);
Log($"Login(): {_response}");
if (_response is LogikalLoginResponse)
{
_disconnect.IsEnabled = false;
_login.IsEnabled = false;
_userid.IsEnabled = false;
_password.IsEnabled = false;
_logout.IsEnabled = true;
_projects.IsEnabled = true;
}
}
private void _logout_OnClick(object sender, RoutedEventArgs e)
{
var _response = _server.Logout();
Log($"Logout(): {_response}");
if (_response is LogikalLoginResponse)
{
_disconnect.IsEnabled = true;
_login.IsEnabled = true;
_userid.IsEnabled = true;
_password.IsEnabled = true;
_logout.IsEnabled = false;
_projects.IsEnabled = false;
}
}
private void _disconnect_OnClick(object sender, RoutedEventArgs e)
{
var _response = _server.Disconnect();
Log($"Disconnect(): {_response}");
if (_response is LogikalDisconnectResponse)
{
_connect.IsEnabled = true;
_path.IsEnabled = true;
_disconnect.IsEnabled = false;
_login.IsEnabled = false;
_userid.IsEnabled = false;
_password.IsEnabled = false;
_projects.IsEnabled = false;
}
}
private void _projects_OnClick(object sender, RoutedEventArgs e)
{
// var _request = new LogikalProjectsRequest();
// var _response = _server.GetProjects(_request);
// Log($"GetProjects(): {_response}");
// if (_response is LogikalProjectsResponse _projects)
// {
// foreach (var _project in _projects.Projects)
// {
// Log(_project.Name);
// }
// }
}
private void Window_Loaded(object sender, RoutedEventArgs args)
{
_server = new LogikalServer(new WindowInteropHelper(this).Handle);
_server.Log += (o, e) => Log(e.Message);
_listener = new LogikalListener()
{
Server = _server
};
_listener.Disconnecting += (o, e) => Dispatcher.Invoke(() => Close());
_listener.Log += (o, e) => Log(e.Message);
_listener.Start();
Hide();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (!bClosing)
{
Hide();
e.Cancel = true;
}
}
private void ShowInterfaceClick(object sender, RoutedEventArgs e)
{
Show();
}
private bool bClosing = false;
private void DoExitClick(object sender, RoutedEventArgs e)
{
bClosing = true;
Close();
}
}
}