Ooui-tws-port/Ooui/Message.cs

65 lines
1.5 KiB
C#
Raw Normal View History

2017-06-12 20:19:18 +00:00
using System;
2017-06-13 07:03:01 +00:00
using System.Runtime.Serialization;
2017-06-13 03:31:47 +00:00
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
2017-06-12 20:19:18 +00:00
namespace Ooui
{
public class Message
{
2017-06-13 07:03:01 +00:00
[JsonProperty("mid")]
public long Id = GenerateId ();
2017-06-13 03:31:47 +00:00
2017-06-13 07:03:01 +00:00
[JsonProperty("m")]
2017-06-12 20:19:18 +00:00
public MessageType MessageType = MessageType.Nop;
2017-06-13 03:31:47 +00:00
[JsonProperty("id")]
2017-06-12 20:19:18 +00:00
public string TargetId = "";
2017-06-13 03:31:47 +00:00
[JsonProperty("k")]
public string Key = "";
2017-06-13 07:51:24 +00:00
object v = null;
2017-06-13 03:31:47 +00:00
[JsonProperty("v")]
2017-06-13 07:51:24 +00:00
public object Value {
get => v;
set => v = FixupValue (value);
}
static object FixupValue (object v)
{
if (v is Array a) {
var na = new object[a.Length];
for (var i = 0; i < a.Length; i++) {
na[i] = FixupValue (a.GetValue (i));
}
return na;
}
else if (v is Node n) {
return "\u2999" + n.Id;
}
return v;
}
2017-06-13 07:03:01 +00:00
static long idCounter = 0;
static long GenerateId ()
{
return System.Threading.Interlocked.Increment (ref idCounter);
}
2017-06-12 20:19:18 +00:00
}
2017-06-13 07:03:01 +00:00
[JsonConverter (typeof (StringEnumConverter))]
2017-06-12 20:19:18 +00:00
public enum MessageType
{
2017-06-13 07:03:01 +00:00
[EnumMember(Value = "nop")]
2017-06-12 20:19:18 +00:00
Nop,
2017-06-13 07:03:01 +00:00
[EnumMember(Value = "create")]
2017-06-12 20:19:18 +00:00
Create,
2017-06-13 07:03:01 +00:00
[EnumMember(Value = "set")]
2017-06-12 20:45:27 +00:00
Set,
2017-06-13 07:03:01 +00:00
[EnumMember(Value = "call")]
2017-06-12 20:45:27 +00:00
Call,
2017-06-12 20:19:18 +00:00
}
}