Skip to content
This repository was archived by the owner on Oct 21, 2021. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions TouchPortalApi/Interfaces/IMessageProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,23 @@

namespace TouchPortalApi.Interfaces {
public delegate void ActionEventHandler(string actionId, List<ActionData> dataList);
public delegate void HoldActionEventHandler(string actionId, bool held, List<ActionData> dataList);
public delegate void ListChangeEventHandler(string actionId, string listId, string instanceId, string value);
public delegate void CloseEventHandler();
public delegate void ConnectEventHandler();
public delegate void SettingEventHandler(List<Dictionary<string, dynamic>> settings);
public delegate void BroadcastEventHandler(string eventType, string pageName);
public delegate void ExitHandler();

public interface IMessageProcessor {
event ActionEventHandler OnActionEvent;
event HoldActionEventHandler OnHoldActionEvent;
event ListChangeEventHandler OnListChangeEventHandler;
event CloseEventHandler OnCloseEventHandler;
event ConnectEventHandler OnConnectEventHandler;
event SettingEventHandler OnSettingEventHandler;
event BroadcastEventHandler OnBroadcastEventHandler;
event ExitHandler OnExitHandler;

Task Listen();
Task TryPairAsync();
Expand Down
52 changes: 51 additions & 1 deletion TouchPortalApi/MessageProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
using Newtonsoft.Json;
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
using TouchPortalApi.Configuration;
Expand All @@ -25,9 +27,13 @@ public class MessageProcessor : IMessageProcessor {
#region Event Handlers

public event ActionEventHandler OnActionEvent;
public event HoldActionEventHandler OnHoldActionEvent;
public event ListChangeEventHandler OnListChangeEventHandler;
public event CloseEventHandler OnCloseEventHandler;
public event ConnectEventHandler OnConnectEventHandler;
public event SettingEventHandler OnSettingEventHandler;
public event BroadcastEventHandler OnBroadcastEventHandler;
public event ExitHandler OnExitHandler;

#endregion

Expand Down Expand Up @@ -61,6 +67,9 @@ public async Task Listen() {
while (!_cancellationToken.IsCancellationRequested) {
try {
await _tPClient.ProcessPipes();
} catch (SocketException) {
OnExitHandler?.Invoke();
return;
} catch (Exception ex) {
Console.WriteLine(ex);
}
Expand Down Expand Up @@ -91,7 +100,11 @@ private void ProcessLine(ReadOnlySequence<byte> line) {

switch (responseModel.Type.ToLower().Trim()) {
case "info":
HandlePairEvent(JsonConvert.DeserializeObject<PairResponse>(result));
PairResponse pairResponse = JsonConvert.DeserializeObject<PairResponse>(result);
HandlePairEvent(pairResponse);
if(pairResponse.Settings != null) {
HandleSettingEvent(new TPSettingChange { Values = pairResponse.Settings });
}
break;
case "action":
HandleActionEvent(JsonConvert.DeserializeObject<TPAction>(result));
Expand All @@ -102,6 +115,18 @@ private void ProcessLine(ReadOnlySequence<byte> line) {
case "closeplugin":
HandleCloseEvent();
break;
case "settings":
HandleSettingEvent(JsonConvert.DeserializeObject<TPSettingChange>(result));
break;
case "broadcast":
HandleBroadcastEvent(JsonConvert.DeserializeObject<TPBroadcast>(result));
break;
case "up":
HandleHoldActionEvent(JsonConvert.DeserializeObject<TPAction>(result), false);
break;
case "down":
HandleHoldActionEvent(JsonConvert.DeserializeObject<TPAction>(result), true);
break;
default:
Console.WriteLine($"No operation defined for: {responseModel.Type.ToLower().Trim()}");
break;
Expand All @@ -124,6 +149,22 @@ private void HandlePairEvent(PairResponse response) {
}
}

/// <summary>
/// Handle setting event
/// </summary>
/// <param name="setting">The new settings</param>
private void HandleSettingEvent(TPSettingChange setting) {
OnSettingEventHandler?.Invoke(setting.Values);
}

/// <summary>
/// Handle broadcast event
/// </summary>
/// <param name="broadcast">The broadcast event</param>
private void HandleBroadcastEvent(TPBroadcast broadcast) {
OnBroadcastEventHandler?.Invoke(broadcast.Event, broadcast.PageName);
}

/// <summary>
/// Handle an action event
/// </summary>
Expand All @@ -132,6 +173,15 @@ private void HandleActionEvent(TPAction action) {
OnActionEvent?.Invoke(action.ActionId, action.Data);
}

/// <summary>
/// Handle an on hold event
/// </summary>
/// <param name="action">The action being triggered</param>
/// <param name="held">True if held, false when released</param>
private void HandleHoldActionEvent(TPAction action, bool held) {
OnHoldActionEvent?.Invoke(action.ActionId, held, action.Data);
}

/// <summary>
/// Handle a list change event
/// </summary>
Expand Down
5 changes: 4 additions & 1 deletion TouchPortalApi/Models/Initialization/PairResponse.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
using TouchPortalApi.Models.TouchPortal.Responses;
using System.Collections.Generic;
using TouchPortalApi.Models.TouchPortal.Responses;

namespace TouchPortalApi.Models.Initialization {
internal class PairResponse : TPResponseBase {
public string SDKVersion { get; set; }
public string TPVersionString { get; set; }
public string TPVersionCode { get; set; }
public string PluginVersion { get; set; }

public List<Dictionary<string, dynamic>> Settings { get; set; }
}
}
1 change: 1 addition & 0 deletions TouchPortalApi/Models/StateCreate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ public class StateCreate
public string Id { get; set; }
public string Desc { get; set; }
public string DefaultValue { get; set; }
public string ParentGroup { get; set; }
}
}
18 changes: 18 additions & 0 deletions TouchPortalApi/Models/TouchPortal/Responses/TPBroadcast.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Collections.Generic;

namespace TouchPortalApi.Models.TouchPortal.Responses {
/// <summary>
/// Class for the TP Response type of broadcast
/// </summary>
internal class TPBroadcast : TPShared {
/// <summary>
/// Event type
/// </summary>
public string Event { get; set; }

/// <summary>
/// Name of the page that was switched to
/// </summary>
public string PageName { get; set; }
}
}
14 changes: 14 additions & 0 deletions TouchPortalApi/Models/TouchPortal/Responses/TPSettingChange.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Collections.Generic;

namespace TouchPortalApi.Models.TouchPortal.Responses {
/// <summary>
/// Class for the TP Response type of Setting Change
/// </summary>
///
internal class TPSettingChange : TPShared {
/// <summary>
/// New values
/// </summary>
public List<Dictionary<string, dynamic>> Values { get; set; }
}
}
5 changes: 4 additions & 1 deletion TouchPortalApi/TPClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Buffers;
using System.IO.Pipelines;
using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
Expand Down Expand Up @@ -62,7 +63,7 @@ private void InitializeConnection() {
/// <param name="cancellationToken">The cancellation token</param>
public async Task SendAsync(object model, CancellationToken cancellationToken = default) {
string request = PrepareMessage(model);
var bytesSent = Encoding.ASCII.GetBytes(request);
var bytesSent = Encoding.UTF8.GetBytes(request);

await _tpsocket.SendAsync(bytesSent, cancellationToken);
}
Expand All @@ -85,6 +86,8 @@ public async Task ProcessPipes() {
Task reading = ReadPipeAsync(pipe.Reader);

await Task.WhenAll(reading, writing).ConfigureAwait(false);
if(!_tpsocket.Connected)
throw new SocketException();
}

/// <summary>
Expand Down
3 changes: 2 additions & 1 deletion TouchPortalApi/TouchPortalApi.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssemblyVersion>0.3.3.0</AssemblyVersion>
<Version>0.3.3</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Expand All @@ -14,6 +14,7 @@
<Copyright>2020</Copyright>
<NeutralLanguage></NeutralLanguage>
<FileVersion>0.3.3.0</FileVersion>
<Platforms>AnyCPU</Platforms>
</PropertyGroup>

<ItemGroup>
Expand Down