|
@@ -1,38 +1,43 @@
|
|
|
using System;
|
|
|
+using System.Collections.Generic;
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
namespace InABox.Logikal
|
|
|
{
|
|
|
public abstract class LogikalResponse : LogikalObject
|
|
|
{
|
|
|
- public LogikalStatus Status { get; set; } = LogikalStatus.Unknown;
|
|
|
-
|
|
|
- public static LogikalResponse FromMessage(LogikalMessage message)
|
|
|
+
|
|
|
+
|
|
|
+ public new abstract string ToString();
|
|
|
+
|
|
|
+ public LogikalResponse Always(Action<LogikalResponse> handler)
|
|
|
{
|
|
|
- if (message.Method == LogikalMethod.Connect)
|
|
|
- return JsonConvert.DeserializeObject<LogikalConnectResponse>(message.Payload);
|
|
|
- if (message.Method == LogikalMethod.Login)
|
|
|
- return JsonConvert.DeserializeObject<LogikalLoginResponse>(message.Payload);
|
|
|
- if (message.Method == LogikalMethod.Logout)
|
|
|
- return JsonConvert.DeserializeObject<LogikalLogoutResponse>(message.Payload);
|
|
|
- if (message.Method == LogikalMethod.Disconnect)
|
|
|
- return JsonConvert.DeserializeObject<LogikalDisconnectResponse>(message.Payload);
|
|
|
- if (message.Method == LogikalMethod.Error)
|
|
|
- return JsonConvert.DeserializeObject<LogikalErrorResponse>(message.Payload);
|
|
|
- throw new Exception("Unknown Message ID");
|
|
|
+ handler?.Invoke(this);
|
|
|
+ return this;
|
|
|
}
|
|
|
-
|
|
|
- }
|
|
|
|
|
|
- public class LogikalErrorResponse : LogikalResponse
|
|
|
- {
|
|
|
- public override LogikalMethod Method() => LogikalMethod.Error;
|
|
|
-
|
|
|
- public String Message { get; set; }
|
|
|
+ public LogikalResponse Error(Action<LogikalErrorResponse> handler, LogikalStatus status = LogikalStatus.IsError)
|
|
|
+ {
|
|
|
+ if (this is LogikalErrorResponse error && status.HasFlag(error.Status))
|
|
|
+ {
|
|
|
+ handler?.Invoke(error);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return this;
|
|
|
+ }
|
|
|
|
|
|
- public LogikalErrorResponse()
|
|
|
+ public T Success<T>(Action<T> handler) where T : LogikalResponse
|
|
|
{
|
|
|
- Status = LogikalStatus.Error;
|
|
|
+ if (this is T response)
|
|
|
+ {
|
|
|
+ handler?.Invoke(response);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|