From 399c8427a7e365d1bcf0c3801492476307e8c407 Mon Sep 17 00:00:00 2001 From: Almir Kadric Date: Thu, 20 Oct 2016 18:35:56 +0900 Subject: [PATCH 1/6] refactored code to follow new styles, also imported fixes from COJ branch --- Async/Async.cs | 56 ++- EventEmitter/EventEmitter.cs | 48 +- HTTPRequest/HTTPRequest.DotNet.cs | 78 ++- HTTPRequest/HTTPRequest.Unity.cs | 102 ++-- HTTPRequest/HTTPRequestException.cs | 13 +- HTTPRequest/HTTPRequestManager.cs | 21 +- JSONRPC/JSONRPC.cs | 84 ++-- JSONRPC/JSONRPCBatch.cs | 24 +- Mage/Archivist/Archivist.cs | 375 +++++++++------ Mage/Archivist/VaultValue.cs | 92 ++-- Mage/CommandCenter/CommandBatch.cs | 24 +- Mage/CommandCenter/CommandBatchItem.cs | 21 +- Mage/CommandCenter/CommandCenter.cs | 108 +++-- .../TransportClient/CommandHTTPClient.cs | 145 +++--- .../TransportClient/CommandHttpClientCache.cs | 15 + .../TransportClient/CommandJSONRPCClient.cs | 32 +- .../TransportClient/CommandTransportClient.cs | 11 +- .../TransportClient/CommandTransportType.cs | 8 + Mage/EventManager.cs | 39 +- Mage/Logger/LogEntry.cs | 109 +++-- Mage/Logger/Logger.cs | 93 ++-- Mage/Logger/Writers/ConsoleWriter.cs | 206 ++++---- Mage/Logger/Writers/LogWriter.cs | 6 +- Mage/Logger/Writers/ServerWriter.cs | 36 +- Mage/Mage.cs | 251 +++++----- Mage/MageSetupStatus.cs | 10 + Mage/MessageStream/MessageStream.cs | 196 ++++---- .../TransportClient/LongPolling.cs | 164 ++++--- .../TransportClient/ShortPolling.cs | 131 ++--- .../TransportClient/TransportClient.cs | 17 +- .../TransportClient/TransportType.cs | 8 + Mage/Module.cs | 126 +++-- Mage/Session.cs | 33 +- Mage/UserCommandStatus.cs | 13 + Singleton/MonoSingleton.cs | 43 +- Singleton/SceneInstance.cs | 23 +- Singleton/Singleton.cs | 26 +- Tomes/Tome.cs | 92 ++-- Tomes/TomeArray.cs | 446 +++++++++++------- Tomes/TomeObject.cs | 333 +++++++------ Tomes/TomeValue.cs | 170 ++++--- Unity/EditorPlayModeState.cs | 9 + Unity/UnityApplicationState.cs | 22 +- Unity/UnityEditorPlayMode.cs | 61 ++- 44 files changed, 2375 insertions(+), 1545 deletions(-) create mode 100644 Mage/CommandCenter/TransportClient/CommandHttpClientCache.cs create mode 100644 Mage/CommandCenter/TransportClient/CommandTransportType.cs create mode 100644 Mage/MageSetupStatus.cs create mode 100644 Mage/MessageStream/TransportClient/TransportType.cs create mode 100644 Mage/UserCommandStatus.cs create mode 100644 Unity/EditorPlayModeState.cs diff --git a/Async/Async.cs b/Async/Async.cs index 7946f62..7edb461 100644 --- a/Async/Async.cs +++ b/Async/Async.cs @@ -1,7 +1,8 @@ using System; using System.Collections.Generic; -namespace Wizcorp.MageSDK.Utils { +namespace Wizcorp.MageSDK.Utils +{ /// /// Async is a utility class which provides straight-forward, powerful functions for working with asynchronous C#. /// @@ -9,26 +10,31 @@ namespace Wizcorp.MageSDK.Utils { /// some common patterns for asynchronous control flow (parallel, series, waterfall…). All these functions assume you follow /// the convention of providing a single callback as the last argument of your async function. /// - public class Async { - public static void each(List items, Action> fn, Action cb) { - if (items == null || items.Count == 0) { - cb(null); + public static class Async + { + public static void Each(List items, Action> action, Action callback) + { + if (items == null || items.Count == 0) + { + callback(null); return; } - int currentItemI = 0; + var currentItemI = 0; Action iterate = null; iterate = () => { - if (currentItemI >= items.Count) { - cb(null); + if (currentItemI >= items.Count) + { + callback(null); return; } // Execute the given function on this item - fn(items[currentItemI], (Exception error) => { + action(items[currentItemI], error => { // Stop iteration if there was an error - if (error != null) { - cb(error); + if (error != null) + { + callback(error); return; } @@ -42,34 +48,38 @@ public static void each(List items, Action> fn, Actio iterate(); } - public static void series(List>> actionItems, Action cb) { - bool isEmpty = actionItems == null || actionItems.Count == 0; - if (isEmpty) { - cb(null); + public static void Series(List>> actions, Action callback) + { + bool isEmpty = actions == null || actions.Count == 0; + if (isEmpty) + { + callback(null); return; } - int currentItemI = 0; + var currentActionI = 0; Action iterate = null; iterate = () => { - if (currentItemI >= actionItems.Count) { - cb(null); + if (currentActionI >= actions.Count) + { + callback(null); return; } // Shift an element from the list - Action> actionItem = actionItems[currentItemI]; + Action> action = actions[currentActionI]; // Execute the given function on this item - actionItem((Exception error) => { + action(error => { // Stop iteration if there was an error - if (error != null) { - cb(error); + if (error != null) + { + callback(error); return; } // Continue to next item - currentItemI++; + currentActionI++; iterate(); }); }; diff --git a/EventEmitter/EventEmitter.cs b/EventEmitter/EventEmitter.cs index dacbc57..8db7f0a 100644 --- a/EventEmitter/EventEmitter.cs +++ b/EventEmitter/EventEmitter.cs @@ -2,15 +2,19 @@ using System.Collections.Generic; using System.ComponentModel; -namespace Wizcorp.MageSDK.Event { - public class EventEmitter { +namespace Wizcorp.MageSDK.Event +{ + public class EventEmitter + { // private Dictionary eventTags = new Dictionary(); private EventHandlerList eventsList = new EventHandlerList(); // - public void on(string eventTag, Action handler) { - if (!eventTags.ContainsKey(eventTag)) { + public void On(string eventTag, Action handler) + { + if (!eventTags.ContainsKey(eventTag)) + { eventTags.Add(eventTag, new object()); } @@ -18,37 +22,51 @@ public void on(string eventTag, Action handler) { } // - public void once(string eventTag, Action handler) { + public void Once(string eventTag, Action handler) + { Action handlerWrapper = null; - handlerWrapper = (object obj, T arguments) => { + handlerWrapper = (obj, arguments) => { eventsList.RemoveHandler(eventTags[eventTag], handlerWrapper); handler(obj, arguments); }; - on(eventTag, handlerWrapper); + On(eventTag, handlerWrapper); } // - public void emit(string eventTag, object sender, T arguments) { - if (!eventTags.ContainsKey(eventTag)) { + public void Emit(string eventTag, object sender, T arguments) + { + if (!eventTags.ContainsKey(eventTag)) + { return; } - Action execEventList = (Action)eventsList[eventTags[eventTag]]; - execEventList(sender, arguments); + var execEventList = (Action)eventsList[eventTags[eventTag]]; + if (execEventList != null) + { + execEventList(sender, arguments); + } } - public void emit(string eventTag, T arguments) { - emit(eventTag, null, arguments); + public void Emit(string eventTag, T arguments) + { + Emit(eventTag, null, arguments); } // - public void off(string eventTag, Action handler) { + public void Off(string eventTag, Action handler) + { + if (!eventTags.ContainsKey(eventTag)) + { + return; + } + eventsList.RemoveHandler(eventTags[eventTag], handler); } // - public void removeAllListeners() { + public void RemoveAllListeners() + { // Destroy all event handlers eventsList.Dispose(); eventsList = new EventHandlerList(); diff --git a/HTTPRequest/HTTPRequest.DotNet.cs b/HTTPRequest/HTTPRequest.DotNet.cs index 085f3a2..41654bb 100644 --- a/HTTPRequest/HTTPRequest.DotNet.cs +++ b/HTTPRequest/HTTPRequest.DotNet.cs @@ -10,8 +10,10 @@ using System.Text; using System.Threading; -namespace Wizcorp.MageSDK.Network.Http { - public class HTTPRequest { +namespace Wizcorp.MageSDK.Network.Http +{ + public class HTTPRequest + { private HttpWebRequest request; private CookieContainer cookies; private Action cb; @@ -19,11 +21,14 @@ public class HTTPRequest { // Timeout setting for request private long _timeout = 100 * 1000; - public long timeout { - get { + public long timeout + { + get + { return _timeout; } - set { + set + { _timeout = value; timeoutTimer.Dispose(); @@ -36,7 +41,8 @@ public long timeout { // Constructor - public HTTPRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { + public HTTPRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + { // Start timeout timer timeoutTimer = new Timer((object state) => { this.Abort(); @@ -48,19 +54,23 @@ public HTTPRequest(string url, string contentType, byte[] postData, Dictionary entry in headers) { + if (headers != null) + { + foreach (KeyValuePair entry in headers) + { httpRequest.Headers.Add(entry.Key, entry.Value); } } // Set content type if provided - if (contentType != null) { + if (contentType != null) + { httpRequest.ContentType = contentType; } // Set cookies if provided - if (cookies != null) { + if (cookies != null) + { httpRequest.CookieContainer = cookies; } @@ -70,12 +80,16 @@ public HTTPRequest(string url, string contentType, byte[] postData, Dictionary { - if (requestError != null) { + if (requestError != null) + { cb(requestError, null); return; } @@ -89,13 +103,17 @@ public HTTPRequest(string url, string contentType, byte[] postData, Dictionary cb) { + private void WritePostData(byte[] postData, Action cb) + { request.BeginGetRequestStream((IAsyncResult callbackResult) => { - try { + try + { Stream postStream = request.EndGetRequestStream(callbackResult); postStream.Write(postData, 0, postData.Length); postStream.Close(); - } catch (Exception error) { + } + catch (Exception error) + { cb(error); return; } @@ -104,7 +122,8 @@ private void WritePostData(byte[] postData, Action cb) { } // Read response data from request buffer - private void ReadResponseData(Action cb) { + private void ReadResponseData(Action cb) + { // Begin waiting for a response request.BeginGetResponse(new AsyncCallback((IAsyncResult callbackResult) => { // Cleanup timeout @@ -113,15 +132,19 @@ private void ReadResponseData(Action cb) { // Process response string responseString = null; - try { + try + { HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult); - using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream())) { + using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream())) + { responseString = httpWebStreamReader.ReadToEnd(); } response.Close(); - } catch (Exception error) { + } + catch (Exception error) + { cb(error, null); return; } @@ -132,8 +155,10 @@ private void ReadResponseData(Action cb) { // Abort request - public void Abort() { - if (request == null) { + public void Abort() + { + if (request == null) + { return; } @@ -147,20 +172,23 @@ public void Abort() { // Create GET request and return it - public static HTTPRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) { + public static HTTPRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) + { // Create request and return it // The callback will be called when the request is complete return new HTTPRequest(url, null, null, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, Action cb) { + public static HTTPRequest Post(string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, Action cb) + { byte[] binaryPostData = Encoding.UTF8.GetBytes(postData); return Post(url, contentType, binaryPostData, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { + public static HTTPRequest Post(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + { return new HTTPRequest(url, contentType, postData, headers, cookies, cb); } } diff --git a/HTTPRequest/HTTPRequest.Unity.cs b/HTTPRequest/HTTPRequest.Unity.cs index b9293f7..577af34 100644 --- a/HTTPRequest/HTTPRequest.Unity.cs +++ b/HTTPRequest/HTTPRequest.Unity.cs @@ -12,50 +12,48 @@ using UnityEngine; -namespace Wizcorp.MageSDK.Network.Http { - public class HTTPRequest { +namespace Wizcorp.MageSDK.Network.Http +{ + public class HttpRequest + { private WWW request; private CookieContainer cookies; private Action cb; - private Stopwatch timeoutTimer; // Timeout setting for request - private long _timeout = 100 * 1000; - public long timeout { - get { - return _timeout; - } - set { - _timeout = value; - } - } + public long Timeout = 100 * 1000; + private Stopwatch timeoutTimer = new Stopwatch(); // Constructor - public HTTPRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { + public HttpRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + { // Start timeout timer - timeoutTimer = new Stopwatch(); timeoutTimer.Start(); // Queue constructor for main thread execution - HTTPRequestManager.Queue(Constructor(url, contentType, postData, headers, cookies, cb)); + HttpRequestManager.Queue(Constructor(url, contentType, postData, headers, cookies, cb)); } // Main thread constructor - private IEnumerator Constructor(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { + private IEnumerator Constructor(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + { Dictionary headersCopy = new Dictionary(headers); // Set content type if provided - if (contentType != null) { + if (contentType != null) + { headersCopy.Add("ContentType", contentType); } // Set cookies if provided - if (cookies != null) { + if (cookies != null) + { Uri requestUri = new Uri(url); string cookieString = cookies.GetCookieHeader(requestUri); - if (!string.IsNullOrEmpty(cookieString)) { + if (!string.IsNullOrEmpty(cookieString)) + { headersCopy.Add("Cookie", cookieString); } } @@ -63,20 +61,23 @@ private IEnumerator Constructor(string url, string contentType, byte[] postData, // Setup private properties and fire off the request this.cb = cb; this.cookies = cookies; - this.request = new WWW(url, postData, headersCopy); + request = new WWW(url, postData, headersCopy); // Initiate response - HTTPRequestManager.Queue(WaitLoop()); + HttpRequestManager.Queue(WaitLoop()); yield break; } // Wait for www request to complete with timeout checks - private IEnumerator WaitLoop() { - while (request != null && !request.isDone) { - if (timeoutTimer.ElapsedMilliseconds >= timeout) { + private IEnumerator WaitLoop() + { + while (request != null && !request.isDone) + { + if (timeoutTimer.ElapsedMilliseconds >= Timeout) + { // Timed out abort the request with timeout error - this.Abort(); + Abort(); cb(new Exception("Request timed out"), null); yield break; } @@ -86,7 +87,8 @@ private IEnumerator WaitLoop() { } // Check if we destroyed the request due to an abort - if (request == null) { + if (request == null) + { yield break; } @@ -95,18 +97,21 @@ private IEnumerator WaitLoop() { timeoutTimer = null; // Check if there is a callback - if (cb == null) { + if (cb == null) + { yield break; } // Check if there was an error with the request - if (request.error != null) { - int statusCode = 0; - if (request.responseHeaders.ContainsKey("STATUS")) { + if (request.error != null) + { + var statusCode = 0; + if (request.responseHeaders.ContainsKey("STATUS")) + { statusCode = int.Parse(request.responseHeaders["STATUS"].Split(' ')[1]); } - cb(new HTTPRequestException(request.error, statusCode), null); + cb(new HttpRequestException(request.error, statusCode), null); yield break; } @@ -119,12 +124,15 @@ private IEnumerator WaitLoop() { Uri requestUri = new Uri(request.url); PropertyInfo pinfoHeadersString = typeof(WWW).GetProperty("responseHeadersString", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - if (pinfoHeadersString != null) { + if (pinfoHeadersString != null) + { string headersString = pinfoHeadersString.GetValue(request, null) as string; string[] headerLines = headersString.Split('\n'); - foreach (string headerStr in headerLines) { - if (headerStr.StartsWith("set-cookie:", true, null)) { + foreach (string headerStr in headerLines) + { + if (headerStr.StartsWith("set-cookie:", true, null)) + { cookies.SetCookies(requestUri, headerStr.Remove(0, 11)); } } @@ -135,13 +143,15 @@ private IEnumerator WaitLoop() { // Abort request - public void Abort() { - if (this.request == null) { + public void Abort() + { + if (this.request == null) + { return; } WWW request = this.request; - this.request = null; + request = null; request.Dispose(); timeoutTimer.Stop(); @@ -150,22 +160,30 @@ public void Abort() { // Create GET request and return it - public static HTTPRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) { + public static HttpRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) + { // Create request and return it // The callback will be called when the request is complete - return new HTTPRequest(url, null, null, headers, cookies, cb); + return new HttpRequest(url, null, null, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, Action cb) { + public static HttpRequest Post( + string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, + Action cb) + { byte[] binaryPostData = Encoding.UTF8.GetBytes(postData); return Post(url, contentType, binaryPostData, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { - return new HTTPRequest(url, contentType, postData, headers, cookies, cb); + public static HttpRequest Post( + string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, + Action cb) + { + return new HttpRequest(url, contentType, postData, headers, cookies, cb); } } } + #endif diff --git a/HTTPRequest/HTTPRequestException.cs b/HTTPRequest/HTTPRequestException.cs index dda517e..c32e272 100644 --- a/HTTPRequest/HTTPRequestException.cs +++ b/HTTPRequest/HTTPRequestException.cs @@ -1,11 +1,14 @@ using System; -namespace Wizcorp.MageSDK.Network.Http { - public class HTTPRequestException : Exception { - public int Status = 0; +namespace Wizcorp.MageSDK.Network.Http +{ + public class HttpRequestException : Exception + { + public int Status; - public HTTPRequestException(string Message, int Status) : base(Message) { - this.Status = Status; + public HttpRequestException(string message, int status) : base(message) + { + Status = status; } } } diff --git a/HTTPRequest/HTTPRequestManager.cs b/HTTPRequest/HTTPRequestManager.cs index 4ad2c4d..fe8649e 100644 --- a/HTTPRequest/HTTPRequestManager.cs +++ b/HTTPRequest/HTTPRequestManager.cs @@ -3,22 +3,29 @@ using Wizcorp.MageSDK.Utils; -namespace Wizcorp.MageSDK.Network.Http { - public class HTTPRequestManager : MonoSingleton { +namespace Wizcorp.MageSDK.Network.Http +{ + public class HttpRequestManager : MonoSingleton + { // private static List queued = new List(); // - public static void Queue(IEnumerator coroutine) { - lock ((object)queued) { + public static void Queue(IEnumerator coroutine) + { + lock ((object)queued) + { queued.Add(coroutine); } } // - void Update() { - lock ((object)queued) { - for (int i = 0; i < queued.Count; i += 1) { + void Update() + { + lock ((object)queued) + { + for (var i = 0; i < queued.Count; i += 1) + { StartCoroutine(queued[i]); } diff --git a/JSONRPC/JSONRPC.cs b/JSONRPC/JSONRPC.cs index f6497a4..0ef0a22 100644 --- a/JSONRPC/JSONRPC.cs +++ b/JSONRPC/JSONRPC.cs @@ -1,39 +1,44 @@ using System; using System.Collections.Generic; using System.Net; -using System.IO; -using System.Text; using Newtonsoft.Json.Linq; using Wizcorp.MageSDK.Network.Http; -namespace Wizcorp.MageSDK.Network.JsonRpc { - public class JSONRPC { +namespace Wizcorp.MageSDK.Network.JsonRpc +{ + public class JsonRpc + { // Endpoint and Basic Authentication private string endpoint; - Dictionary headers; + private Dictionary headers; - public void SetEndpoint(string endpoint, Dictionary headers = null) { + public void SetEndpoint(string endpoint, Dictionary headers = null) + { this.endpoint = endpoint; this.headers = new Dictionary(headers); } - public void Call(string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) { + public void Call(string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) + { Call(JValue.CreateNull(), methodName, parameters, headers, cookies, cb); } - public void Call(string id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) { + public void Call(string id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) + { Call(new JValue(id), methodName, parameters, headers, cookies, cb); } - public void Call(int id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) { + public void Call(int id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) + { Call(new JValue(id), methodName, parameters, headers, cookies, cb); } - public void Call(JValue id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) { + public void Call(JValue id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) + { // Setup JSON request object - JObject requestObject = new JObject(); + var requestObject = new JObject(); requestObject.Add("jsonrpc", new JValue("2.0")); requestObject.Add("id", id); @@ -42,25 +47,32 @@ public void Call(JValue id, string methodName, JObject parameters, Dictionary { - if (requestError != null) { + SendRequest(postData, headers, cookies, (requestError, responseString) => { + if (requestError != null) + { cb(requestError, null); return; } // Deserialize the JSON response JObject responseObject; - try { + try + { responseObject = JObject.Parse(responseString); - } catch (Exception parseError) { + } + catch (Exception parseError) + { cb(parseError, null); return; } @@ -69,28 +81,36 @@ public void Call(JValue id, string methodName, JObject parameters, Dictionary headers, CookieContainer cookies, Action cb) { + public void CallBatch(JsonRpcBatch rpcBatch, Dictionary headers, CookieContainer cookies, Action cb) + { // Serialize JSON request object into string string postData; - try { - postData = rpcBatch.batch.ToString(); - } catch (Exception serializeError) { + try + { + postData = rpcBatch.Batch.ToString(); + } + catch (Exception serializeError) + { cb(serializeError, null); return; } // Send request - SendRequest(postData, headers, cookies, (Exception requestError, string responseString) => { - if (requestError != null) { + SendRequest(postData, headers, cookies, (requestError, responseString) => { + if (requestError != null) + { cb(requestError, null); return; } // Deserialize the JSON response JArray responseArray; - try { + try + { responseArray = JArray.Parse(responseString); - } catch (Exception parseError) { + } + catch (Exception parseError) + { cb(parseError, null); return; } @@ -99,17 +119,21 @@ public void CallBatch(JSONRPCBatch rpcBatch, Dictionary headers, }); } - private void SendRequest(string postData, Dictionary headers, CookieContainer cookies, Action cb) { + private void SendRequest(string postData, Dictionary headers, CookieContainer cookies, Action cb) + { // Make sure the endpoint is set - if (string.IsNullOrEmpty(this.endpoint)) { + if (string.IsNullOrEmpty(endpoint)) + { cb(new Exception("Endpoint has not been set"), null); return; } // Make a copy of the provided headers and add additional required headers Dictionary finalHeaders = new Dictionary(this.headers); - foreach (var header in headers) { - if (finalHeaders.ContainsKey(header.Key)) { + foreach (var header in headers) + { + if (finalHeaders.ContainsKey(header.Key)) + { continue; } @@ -117,7 +141,7 @@ private void SendRequest(string postData, Dictionary headers, Co } // Send HTTP post to JSON rpc endpoint - HTTPRequest.Post(this.endpoint, "application/json", postData, finalHeaders, cookies, cb); + HttpRequest.Post(endpoint, "application/json", postData, finalHeaders, cookies, cb); } } } diff --git a/JSONRPC/JSONRPCBatch.cs b/JSONRPC/JSONRPCBatch.cs index 1b74c17..682e6cf 100644 --- a/JSONRPC/JSONRPCBatch.cs +++ b/JSONRPC/JSONRPCBatch.cs @@ -1,30 +1,36 @@ using Newtonsoft.Json.Linq; -namespace Wizcorp.MageSDK.Network.JsonRpc { - public class JSONRPCBatch { - public JArray batch = new JArray(); +namespace Wizcorp.MageSDK.Network.JsonRpc +{ + public class JsonRpcBatch + { + public JArray Batch = new JArray(); - public void Add(string methodName, JObject parameters) { + public void Add(string methodName, JObject parameters) + { Add(JValue.CreateNull(), methodName, parameters); } - public void Add(string id, string methodName, JObject parameters) { + public void Add(string id, string methodName, JObject parameters) + { Add(new JValue(id), methodName, parameters); } - public void Add(int id, string methodName, JObject parameters) { + public void Add(int id, string methodName, JObject parameters) + { Add(new JValue(id), methodName, parameters); } - public void Add(JValue id, string methodName, JObject parameters) { - JObject requestObject = new JObject(); + public void Add(JValue id, string methodName, JObject parameters) + { + var requestObject = new JObject(); requestObject.Add("jsonrpc", new JValue("2.0")); requestObject.Add("id", id); requestObject.Add("method", new JValue(methodName)); requestObject.Add("params", parameters); - batch.Add(requestObject); + Batch.Add(requestObject); } } } diff --git a/Mage/Archivist/Archivist.cs b/Mage/Archivist/Archivist.cs index 8f13ba1..17ed7ba 100644 --- a/Mage/Archivist/Archivist.cs +++ b/Mage/Archivist/Archivist.cs @@ -6,48 +6,58 @@ using Wizcorp.MageSDK.Event; using Wizcorp.MageSDK.Log; -namespace Wizcorp.MageSDK.MageClient { - public class Archivist : EventEmitter { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("archivist"); } } +namespace Wizcorp.MageSDK.MageClient +{ + public class Archivist : EventEmitter + { + private Mage Mage + { + get { return Mage.Instance; } + } + + private Logger Logger + { + get { return Mage.Logger("archivist"); } + } // Local cache of all retrieved vault values - private Dictionary _cache = new Dictionary(); + private Dictionary cache = new Dictionary(); // Constructor - public Archivist() { + public Archivist() + { // Set data to vault value when set event received - mage.eventManager.on("archivist:set", (object sender, JToken info) => { - string topic = (string)info["key"]["topic"]; - JObject index = (JObject)info["key"]["index"]; + Mage.EventManager.On("archivist:set", (sender, info) => { + var topic = (string)info["key"]["topic"]; + var index = (JObject)info["key"]["index"]; JToken data = info["value"]["data"]; - string mediaType = (string)info["value"]["mediaType"]; - int? expirationTime = (int?)info["expirationTime"]; + var mediaType = (string)info["value"]["mediaType"]; + var expirationTime = (int?)info["expirationTime"]; ValueSet(topic, index, data, mediaType, expirationTime); }); // Del data inside vault value when del event received - mage.eventManager.on("archivist:del", (object sender, JToken info) => { - string topic = (string)info["key"]["topic"]; - JObject index = (JObject)info["key"]["index"]; + Mage.EventManager.On("archivist:del", (sender, info) => { + var topic = (string)info["key"]["topic"]; + var index = (JObject)info["key"]["index"]; ValueDel(topic, index); }); // Touch vault value expiry when touch event received - mage.eventManager.on("archivist:touch", (object sender, JToken info) => { - string topic = (string)info["key"]["topic"]; - JObject index = (JObject)info["key"]["index"]; - int? expirationTime = (int?)info["expirationTime"]; + Mage.EventManager.On("archivist:touch", (sender, info) => { + var topic = (string)info["key"]["topic"]; + var index = (JObject)info["key"]["index"]; + var expirationTime = (int?)info["expirationTime"]; ValueTouch(topic, index, expirationTime); }); // Apply changes to vault value when applyDiff event is received - mage.eventManager.on("archivist:applyDiff", (object sender, JToken info) => { - string topic = (string)info["key"]["topic"]; - JObject index = (JObject)info["key"]["index"]; - JArray diff = (JArray)info["diff"]; - int? expirationTime = (int?)info["expirationTime"]; + Mage.EventManager.On("archivist:applyDiff", (sender, info) => { + var topic = (string)info["key"]["topic"]; + var index = (JObject)info["key"]["index"]; + var diff = (JArray)info["diff"]; + var expirationTime = (int?)info["expirationTime"]; ValueApplyDiff(topic, index, diff, expirationTime); }); } @@ -58,20 +68,23 @@ public Archivist() { //////////////////////////////////////////// // Returns string id of a vault value for given topic and index - private static string CreateCacheKey(string topic, JObject index) { + private static string CreateCacheKey(string topic, JObject index) + { // Sort the keys so order of index is always the same - List indexKeys = new List(); - foreach (var property in index) { + var indexKeys = new List(); + foreach (KeyValuePair property in index) + { indexKeys.Add(property.Key); } indexKeys.Sort(); // Construct cache key list with correct ordering - List cacheKeys = new List(); + var cacheKeys = new List(); cacheKeys.Add(topic); - foreach (string indexKey in indexKeys) { - cacheKeys.Add(indexKey + "=" + index[indexKey].ToString()); + foreach (string indexKey in indexKeys) + { + cacheKeys.Add(indexKey + "=" + index[indexKey]); } // Join the cache key list into final key string @@ -80,15 +93,19 @@ private static string CreateCacheKey(string topic, JObject index) { // Returns cache value if it exists and has not passed max allowed age - private VaultValue GetCacheValue(string cacheKeyName, int? maxAge = null) { - lock ((object)_cache) { - if (!_cache.ContainsKey(cacheKeyName)) { + private VaultValue GetCacheValue(string cacheKeyName, int? maxAge = null) + { + lock ((object)cache) + { + if (!cache.ContainsKey(cacheKeyName)) + { return null; } - VaultValue value = _cache[cacheKeyName]; - double timespan = (DateTime.UtcNow - value.writtenAt).TotalMilliseconds; - if (maxAge != null && timespan > maxAge * 1000) { + VaultValue value = cache[cacheKeyName]; + double timespan = (DateTime.UtcNow - value.WrittenAt).TotalMilliseconds; + if (maxAge != null && timespan > maxAge * 1000) + { return null; } @@ -98,34 +115,41 @@ private VaultValue GetCacheValue(string cacheKeyName, int? maxAge = null) { // Return cache dictionary - public Dictionary GetCache() { - return _cache; + public Dictionary GetCache() + { + return cache; } // Clear out the cache entirely - public void ClearCache() { - lock ((object)_cache) { - _cache.Clear(); + public void ClearCache() + { + lock ((object)cache) + { + cache.Clear(); } } // Remove a vault value from the cache by it's topic and index - public void DeleteCacheItem(string topic, JObject index) { + public void DeleteCacheItem(string topic, JObject index) + { DeleteCacheItem(CreateCacheKey(topic, index)); } // Remove a vault value from the cache by it's cache key name - public void DeleteCacheItem(string cacheKeyName) { - lock ((object)_cache) { - logger.debug("Deleting cache item: " + cacheKeyName); - if (!_cache.ContainsKey(cacheKeyName)) { + public void DeleteCacheItem(string cacheKeyName) + { + lock ((object)cache) + { + Logger.Debug("Deleting cache item: " + cacheKeyName); + if (!cache.ContainsKey(cacheKeyName)) + { return; } - _cache.Remove(cacheKeyName); + cache.Remove(cacheKeyName); } } @@ -133,31 +157,40 @@ public void DeleteCacheItem(string cacheKeyName) { //////////////////////////////////////////// // Vault Value Manipulation // //////////////////////////////////////////// - private void ValueSetOrDelete(JObject info) { - string topic = (string)info["key"]["topic"]; - JObject index = (JObject)info["key"]["index"]; - JObject rawValue = (JObject)info["value"]; - - if (rawValue != null) { + private void ValueSetOrDelete(JObject info) + { + var topic = (string)info["key"]["topic"]; + var index = (JObject)info["key"]["index"]; + var rawValue = (JObject)info["value"]; + + if (rawValue != null) + { ValueSet(topic, index, rawValue["data"], (string)rawValue["mediaType"], (int?)info["expirationTime"]); - } else { + } + else + { ValueDel(topic, index); } } - private void ValueSet(string topic, JObject index, JToken data, string mediaType, int? expirationTime) { + private void ValueSet(string topic, JObject index, JToken data, string mediaType, int? expirationTime) + { string cacheKeyName = CreateCacheKey(topic, index); - VaultValue cacheValue = null; + VaultValue cacheValue; // NOTE: even though some of these operations lock already, we put them inside this // lock to ensure there is no time inconsistencies if things happen too fast. - lock ((object)_cache) { + lock ((object)cache) + { cacheValue = GetCacheValue(cacheKeyName); - if (cacheValue == null) { + if (cacheValue == null) + { // If it doesn't exist, create a new vault value cacheValue = new VaultValue(topic, index); - _cache.Add(cacheKeyName, cacheValue); - } else { + cache.Add(cacheKeyName, cacheValue); + } + else + { // If it exists delete existing value in preparation for set cacheValue.Del(); } @@ -168,26 +201,29 @@ private void ValueSet(string topic, JObject index, JToken data, string mediaType } // Emit set event - this.emit(topic + ":set", cacheValue); + Emit(topic + ":set", cacheValue); } - private void ValueAdd(string topic, JObject index, JToken data, string mediaType, int? expirationTime) { + private void ValueAdd(string topic, JObject index, JToken data, string mediaType, int? expirationTime) + { string cacheKeyName = CreateCacheKey(topic, index); - VaultValue cacheValue = null; + VaultValue cacheValue; // NOTE: even though some of these operations lock already, we put them inside this // lock to ensure there is no time inconsistencies if things happen too fast. - lock ((object)_cache) { + lock ((object)cache) + { // Check if value already exists cacheValue = GetCacheValue(cacheKeyName); - if (cacheValue != null) { - logger.error("Could not add value (already exists): " + cacheKeyName); + if (cacheValue != null) + { + Logger.Error("Could not add value (already exists): " + cacheKeyName); return; } // Create new vault value cacheValue = new VaultValue(topic, index); - _cache.Add(cacheKeyName, cacheValue); + cache.Add(cacheKeyName, cacheValue); // Set data to vault value cacheValue.SetData(mediaType, data); @@ -195,15 +231,17 @@ private void ValueAdd(string topic, JObject index, JToken data, string mediaType } // Emit add event - this.emit(topic + ":add", cacheValue); + Emit(topic + ":add", cacheValue); } - private void ValueDel(string topic, JObject index) { + private void ValueDel(string topic, JObject index) + { // Check if value already exists string cacheKeyName = CreateCacheKey(topic, index); VaultValue cacheValue = GetCacheValue(cacheKeyName); - if (cacheValue == null) { - logger.warning("Could not delete value (doesn't exist): " + cacheKeyName); + if (cacheValue == null) + { + Logger.Warning("Could not delete value (doesn't exist): " + cacheKeyName); return; } @@ -211,15 +249,17 @@ private void ValueDel(string topic, JObject index) { cacheValue.Del(); // Emit touch event - this.emit(topic + ":del", cacheValue); + Emit(topic + ":del", cacheValue); } - private void ValueTouch(string topic, JObject index, int? expirationTime) { + private void ValueTouch(string topic, JObject index, int? expirationTime) + { // Check if value already exists string cacheKeyName = CreateCacheKey(topic, index); VaultValue cacheValue = GetCacheValue(cacheKeyName); - if (cacheValue == null) { - logger.warning("Could not touch value (doesn't exist): " + cacheKeyName); + if (cacheValue == null) + { + Logger.Warning("Could not touch value (doesn't exist): " + cacheKeyName); return; } @@ -227,15 +267,17 @@ private void ValueTouch(string topic, JObject index, int? expirationTime) { cacheValue.Touch(expirationTime); // Emit touch event - this.emit(topic + ":touch", cacheValue); + Emit(topic + ":touch", cacheValue); } - private void ValueApplyDiff(string topic, JObject index, JArray diff, int? expirationTime) { + private void ValueApplyDiff(string topic, JObject index, JArray diff, int? expirationTime) + { // Make sure value exists string cacheKeyName = CreateCacheKey(topic, index); VaultValue cacheValue = GetCacheValue(cacheKeyName); - if (cacheValue == null) { - logger.warning("Got a diff for a non-existent value:" + cacheKeyName); + if (cacheValue == null) + { + Logger.Warning("Got a diff for a non-existent value:" + cacheKeyName); return; } @@ -244,40 +286,44 @@ private void ValueApplyDiff(string topic, JObject index, JArray diff, int? expir cacheValue.Touch(expirationTime); // Emit applyDiff event - this.emit(topic + ":applyDiff", cacheValue); + Emit(topic + ":applyDiff", cacheValue); } //////////////////////////////////////////// // Raw Communication // //////////////////////////////////////////// - private void rawGet(string topic, JObject index, Action cb) { - JObject parameters = new JObject(); + private void RawGet(string topic, JObject index, Action cb) + { + var parameters = new JObject(); parameters.Add("topic", topic); parameters.Add("index", index); - mage.commandCenter.SendCommand("archivist.rawGet", parameters, cb); + Mage.CommandCenter.SendCommand("archivist.rawGet", parameters, cb); } - private void rawMGet(JToken queries, JObject options, Action cb) { - JObject parameters = new JObject(); + private void RawMGet(JToken queries, JObject options, Action cb) + { + var parameters = new JObject(); parameters.Add(new JProperty("queries", queries)); parameters.Add("options", options); - mage.commandCenter.SendCommand("archivist.rawMGet", parameters, cb); + Mage.CommandCenter.SendCommand("archivist.rawMGet", parameters, cb); } - private void rawList(string topic, JObject partialIndex, JObject options, Action cb) { - JObject parameters = new JObject(); + private void RawList(string topic, JObject partialIndex, JObject options, Action cb) + { + var parameters = new JObject(); parameters.Add("topic", new JValue(topic)); parameters.Add("partialIndex", partialIndex); parameters.Add("options", options); - mage.commandCenter.SendCommand("archivist.rawList", parameters, cb); + Mage.CommandCenter.SendCommand("archivist.rawList", parameters, cb); } - private void rawSet(string topic, JObject index, JToken data, string mediaType, string encoding, string expirationTime, Action cb) { - JObject parameters = new JObject(); + private void RawSet(string topic, JObject index, JToken data, string mediaType, string encoding, string expirationTime, Action cb) + { + var parameters = new JObject(); parameters.Add("topic", new JValue(topic)); parameters.Add("index", index); parameters.Add(new JProperty("data", data)); @@ -285,25 +331,28 @@ private void rawSet(string topic, JObject index, JToken data, string mediaType, parameters.Add("encoding", new JValue(encoding)); parameters.Add("expirationTime", new JValue(expirationTime)); - mage.commandCenter.SendCommand("archivist.rawSet", parameters, cb); + Mage.CommandCenter.SendCommand("archivist.rawSet", parameters, cb); } - private void rawDel(string topic, JObject index, Action cb) { - JObject parameters = new JObject(); + private void RawDel(string topic, JObject index, Action cb) + { + var parameters = new JObject(); parameters.Add("topic", new JValue(topic)); parameters.Add("index", index); - mage.commandCenter.SendCommand("archivist.rawDel", parameters, cb); + Mage.CommandCenter.SendCommand("archivist.rawDel", parameters, cb); } //////////////////////////////////////////// // Exposed Operations // //////////////////////////////////////////// - public void get(string topic, JObject index, JObject options, Action cb) { + public void Get(string topic, JObject index, JObject options, Action cb) + { // Default options options = (options != null) ? options : new JObject(); - if (options["optional"] == null) { + if (options["optional"] == null) + { options.Add("optional", new JValue(false)); } @@ -311,55 +360,66 @@ public void get(string topic, JObject index, JObject options, Action { - if (error != null) { + RawGet(topic, index, (error, result) => { + if (error != null) + { cb(error, null); return; } // Parse value - try { + try + { ValueSetOrDelete((JObject)result); - } catch (Exception cacheError) { + } + catch (Exception cacheError) + { cb(cacheError, null); return; } // Return result - cb(null, GetCacheValue(cacheKeyName).data); + cb(null, GetCacheValue(cacheKeyName).Data); }); } - public void mget(JArray queries, JObject options, Action cb) { + public void MGet(JArray queries, JObject options, Action cb) + { // Default options options = (options != null) ? options : new JObject(); - if (options["optional"] == null) { + if (options["optional"] == null) + { options.Add("optional", new JValue(false)); } // Keep track of actual data we need from server - JArray realQueries = new JArray(); - Dictionary realQueryKeys = new Dictionary(); - JArray responseArray = new JArray(); + var realQueries = new JArray(); + var realQueryKeys = new Dictionary(); + var responseArray = new JArray(); // Check cache - foreach (JObject query in queries) { - string topic = (string)query["topic"]; - JObject index = (JObject)query["index"]; + foreach (JObject query in queries) + { + var topic = (string)query["topic"]; + var index = (JObject)query["index"]; string cacheKeyName = CreateCacheKey(topic, index); VaultValue cacheValue = GetCacheValue(cacheKeyName, (int?)options["maxAge"]); - if (cacheValue != null) { - responseArray.Add(cacheValue.data); - } else { + if (cacheValue != null) + { + responseArray.Add(cacheValue.Data); + } + else + { realQueryKeys.Add(cacheKeyName, responseArray.Count); responseArray.Add(null); realQueries.Add(query); @@ -368,24 +428,34 @@ public void mget(JArray queries, JObject options, Action cb) // Check if any real queries exist - if (realQueries.Count == 0) { + if (realQueries.Count == 0) + { cb(null, responseArray); return; } // Get data from server - rawMGet(realQueries, options, (Exception error, JToken results) => { - if (error != null) { + RawMGet(realQueries, options, (error, results) => { + if (error != null) + { cb(error, null); return; } - try { - foreach (JObject topicValue in results as JArray) { + try + { + var resultsArray = results as JArray; + if (resultsArray == null) + { + throw new Exception("RawMGet returned non Array results: " + results); + } + + foreach (JObject topicValue in resultsArray) + { // Determine value cacheKeyName - string topic = (string)topicValue["key"]["topic"]; - JObject index = (JObject)topicValue["key"]["index"]; + var topic = (string)topicValue["key"]["topic"]; + var index = (JObject)topicValue["key"]["index"]; string cacheKeyName = CreateCacheKey(topic, index); // Set value to cache @@ -393,9 +463,11 @@ public void mget(JArray queries, JObject options, Action cb) // Add value to response int responseKey = realQueryKeys[cacheKeyName]; - responseArray[responseKey].Replace(GetCacheValue(cacheKeyName).data); + responseArray[responseKey].Replace(GetCacheValue(cacheKeyName).Data); } - } catch (Exception cacheError) { + } + catch (Exception cacheError) + { cb(cacheError, null); return; } @@ -405,27 +477,33 @@ public void mget(JArray queries, JObject options, Action cb) }); } - public void mget(JObject queries, JObject options, Action cb) { + public void MGet(JObject queries, JObject options, Action cb) + { // Default options options = (options != null) ? options : new JObject(); - if (options["optional"] == null) { + if (options["optional"] == null) + { options.Add("optional", new JValue(false)); } // Keep track of actual data we need from server - JObject realQueries = new JObject(); - Dictionary realQueryKeys = new Dictionary(); - JObject responseObject = new JObject(); + var realQueries = new JObject(); + var realQueryKeys = new Dictionary(); + var responseObject = new JObject(); // Check cache - foreach (var query in queries) { + foreach (KeyValuePair query in queries) + { string cacheKeyName = CreateCacheKey(query.Value["topic"].ToString(), query.Value["index"] as JObject); VaultValue cacheValue = GetCacheValue(cacheKeyName, (int?)options["maxAge"]); - if (cacheValue != null) { - responseObject.Add(query.Key, cacheValue.data); - } else { + if (cacheValue != null) + { + responseObject.Add(query.Key, cacheValue.Data); + } + else + { realQueryKeys.Add(cacheKeyName, query.Key); realQueries.Add(query.Key, query.Value); } @@ -433,24 +511,34 @@ public void mget(JObject queries, JObject options, Action cb) // Check if any real queries exist - if (realQueries.Count == 0) { + if (realQueries.Count == 0) + { cb(null, responseObject); return; } // Get data from server - rawMGet(realQueries, options, (Exception error, JToken results) => { - if (error != null) { + RawMGet(realQueries, options, (error, results) => { + if (error != null) + { cb(error, null); return; } - try { - foreach (JObject topicValue in results as JArray) { + try + { + var resultsArray = results as JArray; + if (resultsArray == null) + { + throw new Exception("RawMGet returned non Array results: " + results); + } + + foreach (JObject topicValue in resultsArray) + { // Determine value cacheKeyName string valueTopic = topicValue["key"]["topic"].ToString(); - JObject valueIndex = (JObject)topicValue["key"]["index"]; + var valueIndex = (JObject)topicValue["key"]["index"]; string cacheKeyName = CreateCacheKey(valueTopic, valueIndex); // Set value to cache @@ -458,9 +546,11 @@ public void mget(JObject queries, JObject options, Action cb) // Add value to response string responseKey = realQueryKeys[cacheKeyName]; - responseObject.Add(responseKey, GetCacheValue(cacheKeyName).data); + responseObject.Add(responseKey, GetCacheValue(cacheKeyName).Data); } - } catch (Exception cacheError) { + } + catch (Exception cacheError) + { cb(cacheError, null); return; } @@ -470,8 +560,9 @@ public void mget(JObject queries, JObject options, Action cb) }); } - public void list(string topic, JObject partialIndex, JObject options, Action cb) { - rawList(topic, partialIndex, options, cb); + public void List(string topic, JObject partialIndex, JObject options, Action cb) + { + RawList(topic, partialIndex, options, cb); } } } diff --git a/Mage/Archivist/VaultValue.cs b/Mage/Archivist/VaultValue.cs index aca67c5..d4f7410 100644 --- a/Mage/Archivist/VaultValue.cs +++ b/Mage/Archivist/VaultValue.cs @@ -4,92 +4,88 @@ using Wizcorp.MageSDK.Tomes; -namespace Wizcorp.MageSDK.MageClient { - public class VaultValue { +namespace Wizcorp.MageSDK.MageClient +{ + public class VaultValue + { // - private string _topic; - public string topic { get { return _topic; } } - - private JObject _index; - public JObject index { get { return _index; } } - - private JToken _data; - public JToken data { get { return _data; } } - - private string _mediaType; - public string mediaType { get { return _mediaType; } } - - private int? _expirationTime; - public int? expirationTime { get { return _expirationTime; } } + public string Topic { get; private set; } + public JObject Index { get; private set; } + public JToken Data { get; private set; } + public string MediaType { get; private set; } + public int? ExpirationTime { get; private set; } + public DateTime WrittenAt { get; private set; } // - private DateTime _writtenAt; - public DateTime writtenAt { get { return _writtenAt; } } - - - // - public VaultValue(string topic, JObject index) { - _topic = topic; - _index = index; + public VaultValue(string topic, JObject index) + { + Topic = topic; + Index = index; } - // TODO: implement multiple media-types and encoding - public void SetData(string mediaType, JToken data) { - lock ((object)this) { + public void SetData(string mediaType, JToken data) + { + lock ((object)this) + { // Detect media type - _mediaType = mediaType; + MediaType = mediaType; // Set data based on media type - _data = Tome.Conjure(JToken.Parse((string)data)); + Data = Tome.Conjure(JToken.Parse((string)data)); // Bump the last written time - _writtenAt = DateTime.UtcNow; + WrittenAt = DateTime.UtcNow; } } - // - public void Del() { - lock ((object)this) { + public void Del() + { + lock ((object)this) + { // Bump the last written time and check if we have data to destroy - _writtenAt = DateTime.UtcNow; - if (_data == null) { + WrittenAt = DateTime.UtcNow; + if (Data == null) + { return; } // Cleanup data - Tome.Destroy(_data); - _data = null; - _mediaType = null; + Tome.Destroy(Data); + Data = null; + MediaType = null; // Clear expiration time Touch(null); } } - // TODO: the actual implementation of this requires the MAGE time module, // also we have a timer to clear the value once expired. - public void Touch(int? expirationTime) { - lock ((object)this) { - _expirationTime = expirationTime; + public void Touch(int? expirationTime) + { + lock ((object)this) + { + ExpirationTime = expirationTime; } } - // - public void ApplyDiff(JArray diff) { - lock ((object)this) { - if (diff == null || _data == null) { + public void ApplyDiff(JArray diff) + { + lock ((object)this) + { + if (diff == null || Data == null) + { return; } // Apply diff to data - Tome.ApplyDiff(_data, diff); + Tome.ApplyDiff(Data, diff); // Bump the last written time - _writtenAt = DateTime.UtcNow; + WrittenAt = DateTime.UtcNow; } } } diff --git a/Mage/CommandCenter/CommandBatch.cs b/Mage/CommandCenter/CommandBatch.cs index 716a691..db67fd8 100644 --- a/Mage/CommandCenter/CommandBatch.cs +++ b/Mage/CommandCenter/CommandBatch.cs @@ -3,20 +3,24 @@ using Newtonsoft.Json.Linq; -namespace Wizcorp.MageSDK.MageClient.Command { - public class CommandBatch { - public int queryId; - public List> batchHeaders = new List>(); - public List batchItems = new List(); +namespace Wizcorp.MageSDK.MageClient.Command +{ + public class CommandBatch + { + public int QueryId; + public List> BatchHeaders = new List>(); + public List BatchItems = new List(); - public object serialisedCache; + public Object SerialisedCache; - public CommandBatch(int queryId) { - this.queryId = queryId; + public CommandBatch(int queryId) + { + QueryId = queryId; } - public void Queue(string commandName, JObject parameters, Action cb) { - batchItems.Add(new CommandBatchItem(commandName, parameters, cb)); + public void Queue(string commandName, JObject parameters, Action cb) + { + BatchItems.Add(new CommandBatchItem(commandName, parameters, cb)); } } } diff --git a/Mage/CommandCenter/CommandBatchItem.cs b/Mage/CommandCenter/CommandBatchItem.cs index 97ce042..7b3358b 100644 --- a/Mage/CommandCenter/CommandBatchItem.cs +++ b/Mage/CommandCenter/CommandBatchItem.cs @@ -2,16 +2,19 @@ using Newtonsoft.Json.Linq; -namespace Wizcorp.MageSDK.MageClient.Command { - public class CommandBatchItem { - public string commandName; - public JObject parameters; - public Action cb; +namespace Wizcorp.MageSDK.MageClient.Command +{ + public class CommandBatchItem + { + public string CommandName; + public JObject Parameters; + public Action Cb; - public CommandBatchItem(string commandName, JObject parameters, Action cb) { - this.commandName = commandName; - this.parameters = parameters; - this.cb = cb; + public CommandBatchItem(string commandName, JObject parameters, Action cb) + { + CommandName = commandName; + Parameters = parameters; + Cb = cb; } } } diff --git a/Mage/CommandCenter/CommandCenter.cs b/Mage/CommandCenter/CommandCenter.cs index 609f143..fd0b18e 100644 --- a/Mage/CommandCenter/CommandCenter.cs +++ b/Mage/CommandCenter/CommandCenter.cs @@ -7,15 +7,24 @@ using Wizcorp.MageSDK.CommandCenter.Client; using Wizcorp.MageSDK.Log; -namespace Wizcorp.MageSDK.MageClient.Command { - public class CommandCenter { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("CommandCenter"); } } +namespace Wizcorp.MageSDK.MageClient.Command +{ + public class CommandCenter + { + private Mage Mage + { + get { return Mage.Instance; } + } + + private Logger Logger + { + get { return Mage.Logger("CommandCenter"); } + } // Endpoint and credentials private string baseUrl; private string appName; - Dictionary headers = new Dictionary(); + private Dictionary headers = new Dictionary(); // Message Hooks public delegate void MessageHook(CommandBatch commandBatch); @@ -31,26 +40,31 @@ public class CommandCenter { private CommandBatch sendingBatch; // - public CommandCenter(CommandTransportType transportType = CommandTransportType.HTTP) { + public CommandCenter(CommandTransportType transportType = CommandTransportType.HTTP) + { currentBatch = new CommandBatch(nextQueryId++); SetTransport(transportType); } // - public void SetTransport(CommandTransportType transportType) { + public void SetTransport(CommandTransportType transportType) + { // Cleanup existing transport client - if (transportClient != null) { - transportClient = null; - } + transportClient = null; // Create new transport client instance - if (transportType == CommandTransportType.HTTP) { - transportClient = new CommandHTTPClient() as CommandTransportClient; + if (transportType == CommandTransportType.HTTP) + { + transportClient = new CommandHttpClient(); transportClient.SetEndpoint(baseUrl, appName, headers); - } else if (transportType == CommandTransportType.JSONRPC) { - transportClient = new CommandJSONRPCClient() as CommandTransportClient; + } + else if (transportType == CommandTransportType.JSONRPC) + { + transportClient = new CommandJsonRpcClient(); transportClient.SetEndpoint(baseUrl, appName, headers); - } else { + } + else + { throw new Exception("Invalid transport type: " + transportType); } @@ -60,81 +74,95 @@ public void SetTransport(CommandTransportType transportType) { } // - public void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) { + public void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) + { this.baseUrl = baseUrl; this.appName = appName; this.headers = new Dictionary(headers); - if (transportClient != null) { + if (transportClient != null) + { transportClient.SetEndpoint(this.baseUrl, this.appName, this.headers); } } // - private void SendBatch() { - mage.eventManager.emit("io.send", null); + private void SendBatch() + { + Mage.EventManager.Emit("io.send", null); - lock ((object)this) { + lock ((object)this) + { // Swap batches around locking the queue sendingBatch = currentBatch; currentBatch = new CommandBatch(nextQueryId++); // Execute pre-serialisation message hooks - if (preSerialiseHook != null) { + if (preSerialiseHook != null) + { preSerialiseHook.Invoke(sendingBatch); } // Serialise the batch - logger.debug("Serialising batch: " + sendingBatch.queryId); + Logger.Debug("Serialising batch: " + sendingBatch.QueryId); transportClient.SerialiseBatch(sendingBatch); // Execute pre-network message hooks - if (preNetworkHook != null) { + if (preNetworkHook != null) + { preNetworkHook.Invoke(sendingBatch); } // Send the batch - logger.debug("Sending batch: " + sendingBatch.queryId); + Logger.Debug("Sending batch: " + sendingBatch.QueryId); transportClient.SendBatch(sendingBatch); } } // Resend batch - public void Resend() { - mage.eventManager.emit("io.resend", null); + public void Resend() + { + Mage.EventManager.Emit("io.resend", null); - logger.debug("Re-sending batch: " + sendingBatch.queryId); + Logger.Debug("Re-sending batch: " + sendingBatch.QueryId); transportClient.SendBatch(sendingBatch); } // - private void BatchComplete() { - mage.eventManager.emit("io.response", null); + private void BatchComplete() + { + Mage.EventManager.Emit("io.response", null); - lock ((object)this) { + lock ((object)this) + { sendingBatch = null; // Check if next queued batch should be sent as well - if (currentBatch.batchItems.Count > 0) { + if (currentBatch.BatchItems.Count > 0) + { SendBatch(); } } } // - private void TransportError(string errorType, Exception error) { - logger.data(error).error("Error when sending command batch request '" + errorType + "'"); - mage.eventManager.emit("io.error." + errorType, null); + private void TransportError(string errorType, Exception error) + { + Logger.Data(error).Error("Error when sending command batch request '" + errorType + "'"); + Mage.EventManager.Emit("io.error." + errorType, null); } // Try and send a command right away if there is nothing being sent. - public void SendCommand(string commandName, JObject parameters, Action cb) { - lock ((object)this) { + public void SendCommand(string commandName, JObject parameters, Action cb) + { + lock ((object)this) + { // Add command to queue currentBatch.Queue(commandName, parameters, cb); // Check if we are busy and should only queue - if (sendingBatch != null) { + if (sendingBatch != null) + { return; } @@ -144,8 +172,10 @@ public void SendCommand(string commandName, JObject parameters, Action cb) { - lock ((object)this) { + public void PiggyBackCommand(string commandName, JObject parameters, Action cb) + { + lock ((object)this) + { currentBatch.Queue(commandName, parameters, cb); } } diff --git a/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs b/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs index 86ff736..4626357 100644 --- a/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs +++ b/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs @@ -11,117 +11,141 @@ using Wizcorp.MageSDK.MageClient.Command; using Wizcorp.MageSDK.Network.Http; -namespace Wizcorp.MageSDK.Command.Client { - public class CommandHttpClientCache { - public string batchUrl; - public string postData; - public Dictionary headers; - - public CommandHttpClientCache(string batchUrl, string postData, Dictionary headers) { - this.batchUrl = batchUrl; - this.postData = postData; - this.headers = headers; +namespace Wizcorp.MageSDK.Command.Client +{ + public class CommandHttpClient : CommandTransportClient + { + private Mage Mage + { + get { return Mage.Instance; } } - } - public class CommandHTTPClient : CommandTransportClient { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("CommandHTTPClient"); } } + private Logger Logger + { + get { return Mage.Logger("CommandHttpClient"); } + } // private string endpoint; private Dictionary headers; // - public override void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) { - this.endpoint = baseUrl + "/" + appName; - this.headers = new Dictionary(headers); + public override void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) + { + endpoint = baseUrl + "/" + appName; + headers = new Dictionary(headers); } // - public override void SerialiseBatch(CommandBatch commandBatch) { + public override void SerialiseBatch(CommandBatch commandBatch) + { List commands = new List(); List data = new List(); // Attach batch headers to post data JArray batchHeaders = new JArray(); - for (int batchHeaderI = 0; batchHeaderI < commandBatch.batchHeaders.Count; batchHeaderI += 1) { - Dictionary batchHeader = commandBatch.batchHeaders[batchHeaderI]; + for (int batchHeaderI = 0; batchHeaderI < commandBatch.BatchHeaders.Count; batchHeaderI += 1) + { + Dictionary batchHeader = commandBatch.BatchHeaders[batchHeaderI]; batchHeaders.Add(JObject.FromObject(batchHeader)); } data.Add(batchHeaders.ToString(Newtonsoft.Json.Formatting.None)); // Attach command names to url and parameters to post data - for (int batchItemI = 0; batchItemI < commandBatch.batchItems.Count; batchItemI += 1) { - CommandBatchItem commandItem = commandBatch.batchItems[batchItemI]; - commands.Add(commandItem.commandName); - data.Add(commandItem.parameters.ToString(Newtonsoft.Json.Formatting.None)); - logger.data(commandItem.parameters).verbose("sending command: " + commandItem.commandName); + for (int batchItemI = 0; batchItemI < commandBatch.BatchItems.Count; batchItemI += 1) + { + CommandBatchItem commandItem = commandBatch.BatchItems[batchItemI]; + commands.Add(commandItem.CommandName); + data.Add(commandItem.Parameters.ToString(Newtonsoft.Json.Formatting.None)); + Logger.Data(commandItem.Parameters).Verbose("sending command: " + commandItem.CommandName); } - string batchUrl = endpoint + "/" + String.Join(",", commands.ToArray()) + "?queryId=" + commandBatch.queryId.ToString(); + string batchUrl = endpoint + "/" + String.Join(",", commands.ToArray()) + "?queryId=" + commandBatch.QueryId.ToString(); string postData = string.Join("\n", data.ToArray()); // Cached the serialisation - commandBatch.serialisedCache = (object)new CommandHttpClientCache( + commandBatch.SerialisedCache = (object)new CommandHttpClientCache( batchUrl, postData, - new Dictionary(this.headers) + new Dictionary(headers) ); } // - public override void SendBatch(CommandBatch commandBatch) { + public override void SendBatch(CommandBatch commandBatch) + { // Extract serialisation from cache - CommandHttpClientCache serialisedCache = (CommandHttpClientCache)commandBatch.serialisedCache; - string batchUrl = serialisedCache.batchUrl; - string postData = serialisedCache.postData; - Dictionary headers = serialisedCache.headers; + CommandHttpClientCache serialisedCache = (CommandHttpClientCache)commandBatch.SerialisedCache; + string batchUrl = serialisedCache.BatchUrl; + string postData = serialisedCache.PostData; + Dictionary headers = serialisedCache.Headers; // Send HTTP request - SendRequest(batchUrl, postData, headers, (JArray responseArray) => { + SendRequest(batchUrl, postData, headers, responseArray => { // Process each command response - try { - for (int batchId = 0; batchId < responseArray.Count; batchId += 1) { - JArray commandResponse = responseArray[batchId] as JArray; - CommandBatchItem commandItem = commandBatch.batchItems[batchId]; - string commandName = commandItem.commandName; - Action commandCb = commandItem.cb; + try + { + for (var batchId = 0; batchId < responseArray.Count; batchId += 1) + { + var commandResponse = responseArray[batchId] as JArray; + if (commandResponse == null) + { + throw new Exception("Response item " + batchId + " is not an Array:" + responseArray); + } + + CommandBatchItem commandItem = commandBatch.BatchItems[batchId]; + string commandName = commandItem.CommandName; + Action commandCb = commandItem.Cb; // Check if there are any events attached to this request - if (commandResponse.Count >= 3) { - logger.verbose("[" + commandName + "] processing events"); - mage.eventManager.emitEventList((JArray)commandResponse[2]); + if (commandResponse.Count >= 3) + { + Logger.Verbose("[" + commandName + "] processing events"); + Mage.EventManager.EmitEventList((JArray)commandResponse[2]); } // Check if the response was an error - if (commandResponse[0].Type != JTokenType.Null) { - logger.verbose("[" + commandName + "] server error"); + if (commandResponse[0].Type != JTokenType.Null) + { + Logger.Verbose("[" + commandName + "] server error"); commandCb(new Exception(commandResponse[0].ToString()), null); - return; + continue; } // Pull off call result object, if it doesn't exist - logger.verbose("[" + commandName + "] call response"); - commandCb(null, commandResponse[1]); + Logger.Verbose("[" + commandName + "] call response"); + + try + { + commandCb(null, commandResponse[1]); + } + catch (Exception error) + { + Logger.Data(error).Error("Error during command callback"); + } } - } catch (Exception error) { - logger.data(error).error("Error when processing command batch responses"); + } + catch (Exception error) + { + Logger.Data(error).Error("Error when processing command batch responses"); } }); } - private void SendRequest(string batchUrl, string postData, Dictionary headers, Action cb) { - HTTPRequest.Post(batchUrl, "", postData, headers, mage.cookies, (Exception requestError, string responseString) => { - logger.verbose("Recieved response: " + responseString); + private void SendRequest(string batchUrl, string postData, Dictionary headers, Action cb) + { + HttpRequest.Post(batchUrl, "", postData, headers, Mage.Cookies, (requestError, responseString) => { + Logger.Verbose("Recieved response: " + responseString); // Check if there was a transport error - if (requestError != null) { - string error = "network"; + if (requestError != null) + { + var error = "network"; // On error - var httpError = requestError as HTTPRequestException; - if (httpError != null && httpError.Status == 503) { + var httpError = requestError as HttpRequestException; + if (httpError != null && httpError.Status == 503) + { error = "maintenance"; } @@ -131,9 +155,12 @@ private void SendRequest(string batchUrl, string postData, Dictionary Headers; + + public CommandHttpClientCache(string batchUrl, string postData, Dictionary headers) + { + BatchUrl = batchUrl; + PostData = postData; + Headers = headers; + } +} diff --git a/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs b/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs index 727d60b..79a12fe 100644 --- a/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs +++ b/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs @@ -7,30 +7,42 @@ using Wizcorp.MageSDK.MageClient.Command; using Wizcorp.MageSDK.Network.JsonRpc; -namespace Wizcorp.MageSDK.Command.Client { - public class CommandJSONRPCClient : CommandTransportClient { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("CommandJSONRPCClient"); } } +namespace Wizcorp.MageSDK.Command.Client +{ + public class CommandJsonRpcClient : CommandTransportClient + { + private Mage Mage + { + get { return Mage.Instance; } + } + + private Logger Logger + { + get { return Mage.Logger("CommandJsonrpcClient"); } + } - private JSONRPC rpcClient = new JSONRPC(); + private JsonRpc rpcClient = new JsonRpc(); // - public override void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) { + public override void SetEndpoint(string baseUrl, string appName, Dictionary headers = null) + { rpcClient.SetEndpoint(baseUrl + "/" + appName + "/jsonrpc", headers); } // - public override void SerialiseBatch(CommandBatch commandBatch) { - logger.verbose("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); + public override void SerialiseBatch(CommandBatch commandBatch) + { + Logger.Verbose("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); throw new Exception("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); } // - public override void SendBatch(CommandBatch commandBatch) { + public override void SendBatch(CommandBatch commandBatch) + { // NOTE: This transport client cannot be implemented yet as JSON RPC support is // terminally broken in MAGE (does not support queryId and response caching). // Until this is fixed, this transport client cannot be used or completed. - logger.verbose("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); + Logger.Verbose("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); throw new Exception("THIS TRANSPORT CLIENT IS NOT IMPLEMENTED"); /* diff --git a/Mage/CommandCenter/TransportClient/CommandTransportClient.cs b/Mage/CommandCenter/TransportClient/CommandTransportClient.cs index 8363c1e..913ff5d 100644 --- a/Mage/CommandCenter/TransportClient/CommandTransportClient.cs +++ b/Mage/CommandCenter/TransportClient/CommandTransportClient.cs @@ -3,13 +3,10 @@ using Wizcorp.MageSDK.MageClient.Command; -namespace Wizcorp.MageSDK.CommandCenter.Client { - public enum CommandTransportType { - HTTP, - JSONRPC - } - - public abstract class CommandTransportClient { +namespace Wizcorp.MageSDK.CommandCenter.Client +{ + public abstract class CommandTransportClient + { public Action OnSendComplete; public Action OnTransportError; diff --git a/Mage/CommandCenter/TransportClient/CommandTransportType.cs b/Mage/CommandCenter/TransportClient/CommandTransportType.cs new file mode 100644 index 0000000..27b26ba --- /dev/null +++ b/Mage/CommandCenter/TransportClient/CommandTransportType.cs @@ -0,0 +1,8 @@ +namespace Wizcorp.MageSDK.Command.Client +{ + public enum CommandTransportType + { + HTTP, + JSONRPC + } +} \ No newline at end of file diff --git a/Mage/EventManager.cs b/Mage/EventManager.cs index 6c200e0..8e81efb 100644 --- a/Mage/EventManager.cs +++ b/Mage/EventManager.cs @@ -3,13 +3,25 @@ using Wizcorp.MageSDK.Event; using Wizcorp.MageSDK.Log; -namespace Wizcorp.MageSDK.MageClient { - public class EventManager : EventEmitter { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("eventManager"); } } +namespace Wizcorp.MageSDK.MageClient +{ + public class EventManager : EventEmitter + { + private Mage Mage + { + get { return Mage.Instance; } + } + + private Logger Logger + { + get { return Mage.Logger("eventManager"); } + } + - public void emitEventList(JArray events) { - foreach (JToken responseEvent in events) { + public void EmitEventList(JArray events) + { + foreach (JToken responseEvent in events) + { string eventTag = null; JToken eventData = null; @@ -17,24 +29,27 @@ public void emitEventList(JArray events) { JArray eventItem = JArray.Parse(responseEvent.ToString()); // Check that event name is present - if (eventItem.Count >= 1) { + if (eventItem.Count >= 1) + { eventTag = eventItem[0].ToString(); } // Check if any event data is present - if (eventItem.Count == 2) { + if (eventItem.Count == 2) + { eventData = eventItem[1]; } // Check if there were any errors, log and skip them - if (eventTag == null || eventItem.Count > 2) { - logger.data(eventItem).error("Invalid event format:"); + if (eventTag == null || eventItem.Count > 2) + { + Logger.Data(eventItem).Error("Invalid event format:"); continue; } // Emit the event - logger.debug("Emitting '" + eventTag + "'"); - mage.eventManager.emit(eventTag, eventData); + Logger.Debug("Emitting '" + eventTag + "'"); + Mage.EventManager.Emit(eventTag, eventData); } } } diff --git a/Mage/Logger/LogEntry.cs b/Mage/Logger/LogEntry.cs index 234b3fe..19fe347 100644 --- a/Mage/Logger/LogEntry.cs +++ b/Mage/Logger/LogEntry.cs @@ -1,77 +1,90 @@ -namespace Wizcorp.MageSDK.Log { - public class LogEntry { +namespace Wizcorp.MageSDK.Log +{ + public class LogEntry + { // - public string channel; - public string context; - public object data; - public string message; + public string Channel; + public string Context; + public object Data; + public string Message; - public LogEntry(string context, object data = null) { - this.context = context; - this.data = data; + public LogEntry(string context, object data = null) + { + Context = context; + Data = data; } // - private void emitLog() { - Logger.logEmitter.emit("log", this); - Logger.logEmitter.emit("log:" + this.channel, this); + private void EmitLog() + { + Logger.LogEmitter.Emit("log", this); + Logger.LogEmitter.Emit("log:" + Channel, this); } // - public void verbose(string message) { - this.channel = "verbose"; - this.message = message; - emitLog(); + public void Verbose(string message) + { + Channel = "verbose"; + Message = message; + EmitLog(); } - public void debug(string message) { - this.channel = "debug"; - this.message = message; - emitLog(); + public void Debug(string message) + { + Channel = "debug"; + Message = message; + EmitLog(); } - public void info(string message) { - this.channel = "info"; - this.message = message; - emitLog(); + public void Info(string message) + { + Channel = "info"; + Message = message; + EmitLog(); } - public void notice(string message) { - this.channel = "notice"; - this.message = message; - emitLog(); + public void Notice(string message) + { + Channel = "notice"; + Message = message; + EmitLog(); } - public void warning(string message) { - this.channel = "warning"; - this.message = message; - emitLog(); + public void Warning(string message) + { + Channel = "warning"; + Message = message; + EmitLog(); } - public void error(string message) { - this.channel = "error"; - this.message = message; - emitLog(); + public void Error(string message) + { + Channel = "error"; + Message = message; + EmitLog(); } - public void critical(string message) { - this.channel = "critical"; - this.message = message; - emitLog(); + public void Critical(string message) + { + Channel = "critical"; + Message = message; + EmitLog(); } - public void alert(string message) { - this.channel = "alert"; - this.message = message; - emitLog(); + public void Alert(string message) + { + Channel = "alert"; + Message = message; + EmitLog(); } - public void emergency(string message) { - this.channel = "emergency"; - this.message = message; - emitLog(); + public void Emergency(string message) + { + Channel = "emergency"; + Message = message; + EmitLog(); } } } diff --git a/Mage/Logger/Logger.cs b/Mage/Logger/Logger.cs index 760b30c..011c276 100644 --- a/Mage/Logger/Logger.cs +++ b/Mage/Logger/Logger.cs @@ -4,39 +4,47 @@ using Wizcorp.MageSDK.Event; using Wizcorp.MageSDK.Log.Writers; -namespace Wizcorp.MageSDK.Log { - public class Logger { +namespace Wizcorp.MageSDK.Log +{ + public class Logger + { // - public static EventEmitter logEmitter = new EventEmitter(); + public static EventEmitter LogEmitter = new EventEmitter(); // - public static Dictionary logWriters; - public static void SetConfig(Dictionary> config) { + public static Dictionary LogWriters; + public static void SetConfig(Dictionary> config) + { // Destroy existing log writers - if (logWriters != null) { - foreach (var writer in logWriters.Values) { + if (LogWriters != null) + { + foreach (LogWriter writer in LogWriters.Values) + { writer.Dispose(); } - logWriters = null; + LogWriters = null; } // Make sure we have configured something - if (config == null) { + if (config == null) + { return; } // Create each writer with log levels - logWriters = new Dictionary(); - foreach (var property in config) { + LogWriters = new Dictionary(); + foreach (KeyValuePair> property in config) + { string writer = property.Key; List writerConfig = property.Value; - switch (writer) { + switch (writer) + { case "console": - logWriters.Add(writer, new ConsoleWriter(writerConfig) as LogWriter); + LogWriters.Add(writer, new ConsoleWriter(writerConfig)); break; case "server": - logWriters.Add(writer, new ServerWriter(writerConfig) as LogWriter); + LogWriters.Add(writer, new ServerWriter(writerConfig)); break; default: throw new Exception("Unknown Log Writer: " + writer); @@ -46,54 +54,65 @@ public static void SetConfig(Dictionary> config) { // - private string _context; + private string context; - public Logger(string context) { - _context = context; + public Logger(string context) + { + this.context = context; } // - public LogEntry data(object data) { - return new LogEntry(_context, data); + public LogEntry Data(object data) + { + return new LogEntry(context, data); } // - public void verbose(string message) { - (new LogEntry(_context)).verbose(message); + public void Verbose(string message) + { + (new LogEntry(context)).Verbose(message); } - public void debug(string message) { - (new LogEntry(_context)).debug(message); + public void Debug(string message) + { + (new LogEntry(context)).Debug(message); } - public void info(string message) { - (new LogEntry(_context)).info(message); + public void Info(string message) + { + (new LogEntry(context)).Info(message); } - public void notice(string message) { - (new LogEntry(_context)).notice(message); + public void Notice(string message) + { + (new LogEntry(context)).Notice(message); } - public void warning(string message) { - (new LogEntry(_context)).warning(message); + public void Warning(string message) + { + (new LogEntry(context)).Warning(message); } - public void error(string message) { - (new LogEntry(_context)).error(message); + public void Error(string message) + { + (new LogEntry(context)).Error(message); } - public void critical(string message) { - (new LogEntry(_context)).critical(message); + public void Critical(string message) + { + (new LogEntry(context)).Critical(message); } - public void alert(string message) { - (new LogEntry(_context)).alert(message); + public void Alert(string message) + { + (new LogEntry(context)).Alert(message); } - public void emergency(string message) { - (new LogEntry(_context)).emergency(message); + public void Emergency(string message) + { + (new LogEntry(context)).Emergency(message); } } } diff --git a/Mage/Logger/Writers/ConsoleWriter.cs b/Mage/Logger/Writers/ConsoleWriter.cs index be96b84..83bffba 100644 --- a/Mage/Logger/Writers/ConsoleWriter.cs +++ b/Mage/Logger/Writers/ConsoleWriter.cs @@ -1,157 +1,201 @@ using System; using System.Collections.Generic; -namespace Wizcorp.MageSDK.Log.Writers { - public class ConsoleWriter : LogWriter { +namespace Wizcorp.MageSDK.Log.Writers +{ + public class ConsoleWriter : LogWriter + { private List config; - public ConsoleWriter(List logLevels) { + public ConsoleWriter(List logLevels) + { config = logLevels; - if (config.Contains("verbose")) { - Logger.logEmitter.on("log:verbose", Verbose); + if (config.Contains("verbose")) + { + Logger.LogEmitter.On("log:verbose", Verbose); } - if (config.Contains("debug")) { - Logger.logEmitter.on("log:debug", Debug); + if (config.Contains("debug")) + { + Logger.LogEmitter.On("log:debug", Debug); } - if (config.Contains("info")) { - Logger.logEmitter.on("log:info", Info); + if (config.Contains("info")) + { + Logger.LogEmitter.On("log:info", Info); } - if (config.Contains("notice")) { - Logger.logEmitter.on("log:notice", Notice); + if (config.Contains("notice")) + { + Logger.LogEmitter.On("log:notice", Notice); } - if (config.Contains("warning")) { - Logger.logEmitter.on("log:warning", Warning); + if (config.Contains("warning")) + { + Logger.LogEmitter.On("log:warning", Warning); } - if (config.Contains("error")) { - Logger.logEmitter.on("log:error", Error); + if (config.Contains("error")) + { + Logger.LogEmitter.On("log:error", Error); } - if (config.Contains("critical")) { - Logger.logEmitter.on("log:critical", Critical); + if (config.Contains("critical")) + { + Logger.LogEmitter.On("log:critical", Critical); } - if (config.Contains("alert")) { - Logger.logEmitter.on("log:alert", Alert); + if (config.Contains("alert")) + { + Logger.LogEmitter.On("log:alert", Alert); } - if (config.Contains("emergency")) { - Logger.logEmitter.on("log:emergency", Emergency); + if (config.Contains("emergency")) + { + Logger.LogEmitter.On("log:emergency", Emergency); } } - public override void Dispose() { - if (config.Contains("verbose")) { - Logger.logEmitter.off("log:verbose", Verbose); + public override void Dispose() + { + if (config.Contains("verbose")) + { + Logger.LogEmitter.Off("log:verbose", Verbose); } - if (config.Contains("debug")) { - Logger.logEmitter.off("log:debug", Debug); + if (config.Contains("debug")) + { + Logger.LogEmitter.Off("log:debug", Debug); } - if (config.Contains("info")) { - Logger.logEmitter.off("log:info", Info); + if (config.Contains("info")) + { + Logger.LogEmitter.Off("log:info", Info); } - if (config.Contains("notice")) { - Logger.logEmitter.off("log:notice", Notice); + if (config.Contains("notice")) + { + Logger.LogEmitter.Off("log:notice", Notice); } - if (config.Contains("warning")) { - Logger.logEmitter.off("log:warning", Warning); + if (config.Contains("warning")) + { + Logger.LogEmitter.Off("log:warning", Warning); } - if (config.Contains("error")) { - Logger.logEmitter.off("log:error", Error); + if (config.Contains("error")) + { + Logger.LogEmitter.Off("log:error", Error); } - if (config.Contains("critical")) { - Logger.logEmitter.off("log:critical", Critical); + if (config.Contains("critical")) + { + Logger.LogEmitter.Off("log:critical", Critical); } - if (config.Contains("alert")) { - Logger.logEmitter.off("log:alert", Alert); + if (config.Contains("alert")) + { + Logger.LogEmitter.Off("log:alert", Alert); } - if (config.Contains("emergency")) { - Logger.logEmitter.off("log:emergency", Emergency); + if (config.Contains("emergency")) + { + Logger.LogEmitter.Off("log:emergency", Emergency); } } - private string makeLogString(string channel, string context, string message) { + private string makeLogString(string channel, string context, string message) + { return String.Format("[{0}] [{1}] {2}", channel, context, message); } - private void Verbose(object sender, LogEntry logEntry) { - UnityEngine.Debug.Log(makeLogString("verbose", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.Log(logEntry.data); + private void Verbose(object sender, LogEntry logEntry) + { + UnityEngine.Debug.Log(makeLogString("verbose", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.Log(logEntry.Data); } } - private void Debug(object sender, LogEntry logEntry) { - UnityEngine.Debug.Log(makeLogString("debug", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.Log(logEntry.data); + private void Debug(object sender, LogEntry logEntry) + { + UnityEngine.Debug.Log(makeLogString("debug", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.Log(logEntry.Data); } } - private void Info(object sender, LogEntry logEntry) { - UnityEngine.Debug.Log(makeLogString("info", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.Log(logEntry.data); + private void Info(object sender, LogEntry logEntry) + { + UnityEngine.Debug.Log(makeLogString("info", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.Log(logEntry.Data); } } - private void Notice(object sender, LogEntry logEntry) { - UnityEngine.Debug.Log(makeLogString("notice", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.Log(logEntry.data); + private void Notice(object sender, LogEntry logEntry) + { + UnityEngine.Debug.Log(makeLogString("notice", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.Log(logEntry.Data); } } - private void Warning(object sender, LogEntry logEntry) { - UnityEngine.Debug.LogWarning(makeLogString("warning", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.LogWarning(logEntry.data); + private void Warning(object sender, LogEntry logEntry) + { + UnityEngine.Debug.LogWarning(makeLogString("warning", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.LogWarning(logEntry.Data); } } - private void Error(object sender, LogEntry logEntry) { - UnityEngine.Debug.LogError(makeLogString("error", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.LogError(logEntry.data); + private void Error(object sender, LogEntry logEntry) + { + UnityEngine.Debug.LogError(makeLogString("error", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.LogError(logEntry.Data); } } - private void Critical(object sender, LogEntry logEntry) { - UnityEngine.Debug.LogError(makeLogString("critical", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - if (logEntry.data is Exception && (logEntry.data as Exception).StackTrace != null) { - Exception excpt = logEntry.data as Exception; - UnityEngine.Debug.LogError(excpt.ToString() + ":\n" + excpt.StackTrace.ToString()); - } else { - UnityEngine.Debug.LogError(logEntry.data); + private void Critical(object sender, LogEntry logEntry) + { + UnityEngine.Debug.LogError(makeLogString("critical", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + if (logEntry.Data is Exception && (logEntry.Data as Exception).StackTrace != null) + { + var excpt = logEntry.Data as Exception; + UnityEngine.Debug.LogError(excpt + ":\n" + excpt.StackTrace); + } + else + { + UnityEngine.Debug.LogError(logEntry.Data); } } } - private void Alert(object sender, LogEntry logEntry) { - UnityEngine.Debug.LogError(makeLogString("alert", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.LogError(logEntry.data); + private void Alert(object sender, LogEntry logEntry) + { + UnityEngine.Debug.LogError(makeLogString("alert", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.LogError(logEntry.Data); } } - private void Emergency(object sender, LogEntry logEntry) { - UnityEngine.Debug.LogError(makeLogString("emergency", logEntry.context, logEntry.message)); - if (logEntry.data != null) { - UnityEngine.Debug.LogError(logEntry.data); + private void Emergency(object sender, LogEntry logEntry) + { + UnityEngine.Debug.LogError(makeLogString("emergency", logEntry.Context, logEntry.Message)); + if (logEntry.Data != null) + { + UnityEngine.Debug.LogError(logEntry.Data); } } } diff --git a/Mage/Logger/Writers/LogWriter.cs b/Mage/Logger/Writers/LogWriter.cs index 42f3f17..e7b7d15 100644 --- a/Mage/Logger/Writers/LogWriter.cs +++ b/Mage/Logger/Writers/LogWriter.cs @@ -1,5 +1,7 @@ -namespace Wizcorp.MageSDK.Log.Writers { - public abstract class LogWriter { +namespace Wizcorp.MageSDK.Log.Writers +{ + public abstract class LogWriter + { public abstract void Dispose(); } } diff --git a/Mage/Logger/Writers/ServerWriter.cs b/Mage/Logger/Writers/ServerWriter.cs index 7c7676f..6d0e41f 100644 --- a/Mage/Logger/Writers/ServerWriter.cs +++ b/Mage/Logger/Writers/ServerWriter.cs @@ -1,45 +1,51 @@ -using System; using System.Collections.Generic; using Newtonsoft.Json.Linq; using Wizcorp.MageSDK.MageClient; -namespace Wizcorp.MageSDK.Log.Writers { - public class ServerWriter : LogWriter { - protected Mage mage { get { return Mage.Instance; } } +namespace Wizcorp.MageSDK.Log.Writers +{ + public class ServerWriter : LogWriter + { + protected Mage Mage { get { return Mage.Instance; } } private List config; - public ServerWriter(List logLevels) { + public ServerWriter(List logLevels) + { config = logLevels; - Logger.logEmitter.on("log", HandleLog); + Logger.LogEmitter.On("log", HandleLog); } - public override void Dispose() { - Logger.logEmitter.off("log", HandleLog); + public override void Dispose() + { + Logger.LogEmitter.Off("log", HandleLog); } - private void HandleLog(object sender, LogEntry logEntry) { - if (config == null || !config.Contains(logEntry.channel)) { + private void HandleLog(object sender, LogEntry logEntry) + { + if (config == null || !config.Contains(logEntry.Channel)) + { return; } - string contextMessage = "[" + logEntry.context + "] " + logEntry.message; + string contextMessage = "[" + logEntry.Context + "] " + logEntry.Message; JObject dataObject = null; - if (logEntry.data != null) { - dataObject = JObject.FromObject(logEntry.data); + if (logEntry.Data != null) + { + dataObject = JObject.FromObject(logEntry.Data); } JObject arguments = new JObject(); - arguments.Add("channel", new JValue(logEntry.channel)); + arguments.Add("channel", new JValue(logEntry.Channel)); arguments.Add("message", new JValue(contextMessage)); arguments.Add("data", dataObject); - mage.commandCenter.SendCommand("logger.sendReport", arguments, (Exception error, JToken result) => { + Mage.CommandCenter.SendCommand("logger.sendReport", arguments, (error, result) => { // if (error) // We honestly can't do anything about this.... }); diff --git a/Mage/Mage.cs b/Mage/Mage.cs index 07ff64c..b736f2f 100644 --- a/Mage/Mage.cs +++ b/Mage/Mage.cs @@ -7,44 +7,44 @@ using Wizcorp.MageSDK.Log; using Wizcorp.MageSDK.MageClient.Message; using Wizcorp.MageSDK.Network.Http; +using Wizcorp.MageSDK.Unity; using Wizcorp.MageSDK.Utils; -namespace Wizcorp.MageSDK.MageClient { - public class MageSetupStatus { - public bool done = false; - public Exception error = null; - } - - - public class Mage : Singleton { +namespace Wizcorp.MageSDK.MageClient +{ + public class Mage : Singleton + { // - public EventManager eventManager; - public Session session; - public Command.CommandCenter commandCenter; - public MessageStream messageStream; - public Archivist archivist; + public EventManager EventManager; + public Session Session; + public Command.CommandCenter CommandCenter; + public MessageStream MessageStream; + public Archivist Archivist; - private Logger _logger; + private Logger logger; // - string baseUrl; - string appName; - Dictionary headers; - public CookieContainer cookies; + private string baseUrl; + private string appName; + private Dictionary headers; + public CookieContainer Cookies; // - private Dictionary _loggers = new Dictionary(); - public Logger logger(string context = null) { - if (string.IsNullOrEmpty(context)) { + private Dictionary loggers = new Dictionary(); + public Logger Logger(string context = null) + { + if (string.IsNullOrEmpty(context)) + { context = "Default"; } - if (_loggers.ContainsKey(context)) { - return _loggers[context]; + if (loggers.ContainsKey(context)) + { + return loggers[context]; } - Logger newLogger = new Logger(context); - _loggers.Add(context, new Logger(context)); + var newLogger = new Logger(context); + loggers.Add(context, new Logger(context)); return newLogger; } @@ -52,166 +52,187 @@ public Logger logger(string context = null) { // Avoid putting setup logic in the contstuctor. Only things that can be // carried between game sessions should go here. Otherwise we need to be // able to re-initialize them inside the setup function. - public Mage() { + public Mage() + { // Setup log writters - _logger = logger("mage"); + logger = Logger("mage"); // TODO: properly check the damn certificate, for now ignore invalid ones (fix issue on Android/iOS) ServicePointManager.ServerCertificateValidationCallback += (o, cert, chain, errors) => true; } // - public void setEndpoints(string baseUrl, string appName, Dictionary headers = null) { + public void SetEndpoints(string baseUrl, string appName, Dictionary headers = null) + { this.baseUrl = baseUrl; this.appName = appName; this.headers = new Dictionary(headers); - if (commandCenter != null) { - commandCenter.SetEndpoint(baseUrl, appName, this.headers); + if (CommandCenter != null) + { + CommandCenter.SetEndpoint(baseUrl, appName, this.headers); } - if (messageStream != null) { - messageStream.SetEndpoint(baseUrl, this.headers); + if (MessageStream != null) + { + MessageStream.SetEndpoint(baseUrl, this.headers); } } // - public void Setup(Action cb) { + public void Setup(Action cb) + { // Cleanup any existing internal modules - if (messageStream != null) { - messageStream.Dispose(); + if (MessageStream != null) + { + MessageStream.Dispose(); } // Instantiate Singletons UnityApplicationState.Instantiate(); - HTTPRequestManager.Instantiate(); + HttpRequestManager.Instantiate(); // Create a shared cookie container - cookies = new CookieContainer(); + Cookies = new CookieContainer(); // Initialize mage internal modules - eventManager = new EventManager(); - commandCenter = new CommandCenter(); - messageStream = new MessageStream(); + EventManager = new EventManager(); + CommandCenter = new Command.CommandCenter(); + MessageStream = new MessageStream(); - session = new Session(); - archivist = new Archivist(); + Session = new Session(); + Archivist = new Archivist(); // Set endpoints - commandCenter.SetEndpoint(baseUrl, appName, headers); - messageStream.SetEndpoint(baseUrl, headers); + CommandCenter.SetEndpoint(baseUrl, appName, headers); + MessageStream.SetEndpoint(baseUrl, headers); cb(null); } // - public void SetupModules(List moduleNames, Action cb) { + public void SetupModules(List moduleNames, Action cb) + { // Setup application modules - _logger.info("Setting up modules"); - Async.each(moduleNames, (string moduleName, Action callback) => { - _logger.info("Setting up module: " + moduleName); - - // Use reflection to find module by name - Assembly assembly = Assembly.GetExecutingAssembly(); - Type[] assemblyTypes = assembly.GetTypes(); - foreach (Type t in assemblyTypes) { - if (moduleName == t.Name) { - BindingFlags staticProperty = BindingFlags.Static | BindingFlags.GetProperty; - BindingFlags publicMethod = BindingFlags.Public | BindingFlags.InvokeMethod; - - // Grab module instance from singleton base - var singletonType = typeof(Singleton<>).MakeGenericType(t); - Object instance = singletonType.InvokeMember("Instance", staticProperty, null, null, null); - - // Setup module - var moduleType = typeof(Module<>).MakeGenericType(t); - Async.series(new List>>() { - (Action callbackInner) => { - // Setup module user commands - object[] arguments = new object[]{callbackInner}; - moduleType.InvokeMember("setupUsercommands", publicMethod, null, instance, arguments); - }, - (Action callbackInner) => { - // Setup module static data - object[] arguments = new object[]{callbackInner}; - moduleType.InvokeMember("setupStaticData", publicMethod, null, instance, arguments); - } - }, (Exception error) => { - if (error != null) { - callback(error); - return; - } + logger.Info("Setting up modules"); + Async.Each( + moduleNames, + (moduleName, callback) => { + logger.Info("Setting up module: " + moduleName); + + // Use reflection to find module by name + Assembly assembly = Assembly.GetExecutingAssembly(); + Type[] assemblyTypes = assembly.GetTypes(); + foreach (Type t in assemblyTypes) + { + if (moduleName == t.Name) + { + BindingFlags staticProperty = BindingFlags.Static | BindingFlags.GetProperty; + BindingFlags publicMethod = BindingFlags.Public | BindingFlags.InvokeMethod; + + // Grab module instance from singleton base + var singletonType = typeof(Singleton<>).MakeGenericType(t); + Object instance = singletonType.InvokeMember("Instance", staticProperty, null, null, null); + + // Setup module + Type moduleType = typeof(Module<>).MakeGenericType(t); + Type t1 = t; + Async.Series( + new List>>() { + // Setup module user commands + callbackInner => { + moduleType.InvokeMember("SetupUsercommands", publicMethod, null, instance, new object[] { callbackInner }); + }, + // Setup module static data + callbackInner => { + moduleType.InvokeMember("SetupStaticData", publicMethod, null, instance, new object[] { callbackInner }); + } + }, + error => { + if (error != null) + { + callback(error); + return; + } + + // Check if the module has a setup method + if (t1.GetMethod("Setup") == null) + { + Logger(moduleName).Info("No setup function"); + callback(null); + return; + } + + // Invoke the setup method on the module + Logger(moduleName).Info("Executing setup function"); + t1.InvokeMember("Setup", publicMethod, null, instance, new object[] { callback }); + } + ); - // Check if the module has a setup method - if (t.GetMethod("Setup") == null) { - logger(moduleName).info("No setup function"); - callback(null); return; } + } - // Invoke the setup method on the module - logger(moduleName).info("Executing setup function"); - object[] arguments = new object[] { callback }; - t.InvokeMember("Setup", publicMethod, null, instance, arguments); - }); - + // If nothing found throw an error + callback(new Exception("Can't find module " + moduleName)); + }, + error => { + if (error != null) + { + logger.Data(error).Error("Setup failed!"); + cb(error); return; } - } - // If nothing found throw an error - callback(new Exception("Can't find module " + moduleName)); - }, (Exception error) => { - if (error != null) { - _logger.data(error).error("Setup failed!"); - cb(error); - return; + logger.Info("Setup complete"); + cb(null); } - - _logger.info("Setup complete"); - cb(null); - }); + ); } // - public IEnumerator SetupTask(Action cb) { + public IEnumerator SetupTask(Action cb) + { // Execute async setup function - MageSetupStatus setupStatus = new MageSetupStatus(); - Setup((Exception error) => { - setupStatus.error = error; - setupStatus.done = true; + var setupStatus = new MageSetupStatus(); + Setup(error => { + setupStatus.Error = error; + setupStatus.Done = true; }); // Wait for setup to return - while (!setupStatus.done) { + while (!setupStatus.Done) + { yield return null; } // Call callback with error if there is one - cb(setupStatus.error); + cb(setupStatus.Error); } // - public IEnumerator SetupModulesTask(List moduleNames, Action cb) { + public IEnumerator SetupModulesTask(List moduleNames, Action cb) + { // Execute async setup function - MageSetupStatus setupStatus = new MageSetupStatus(); - SetupModules(moduleNames, (Exception error) => { - setupStatus.error = error; - setupStatus.done = true; + var setupStatus = new MageSetupStatus(); + SetupModules(moduleNames, error => { + setupStatus.Error = error; + setupStatus.Done = true; }); // Wait for setup to return - while (!setupStatus.done) { + while (!setupStatus.Done) + { yield return null; } // Call callback with error if there is one - cb(setupStatus.error); + cb(setupStatus.Error); } } } diff --git a/Mage/MageSetupStatus.cs b/Mage/MageSetupStatus.cs new file mode 100644 index 0000000..68f821d --- /dev/null +++ b/Mage/MageSetupStatus.cs @@ -0,0 +1,10 @@ +using System; + +namespace Wizcorp.MageSDK.MageClient +{ + public class MageSetupStatus + { + public bool Done = false; + public Exception Error = null; + } +} diff --git a/Mage/MessageStream/MessageStream.cs b/Mage/MessageStream/MessageStream.cs index 0a67a91..97c8f15 100644 --- a/Mage/MessageStream/MessageStream.cs +++ b/Mage/MessageStream/MessageStream.cs @@ -7,18 +7,25 @@ using Wizcorp.MageSDK.Log; using Wizcorp.MageSDK.MageClient.Message.Client; -#if UNITY_EDITOR -using Wizcorp.MageSDK.Editor; -#endif +using Wizcorp.MageSDK.Unity; + +namespace Wizcorp.MageSDK.MageClient.Message +{ + public class MessageStream + { + private static Mage Mage + { + get { return Mage.Instance; } + } -namespace Wizcorp.MageSDK.MageClient.Message { - public class MessageStream { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("messagestream"); } } + private static Logger Logger + { + get { return Mage.Logger("messagestream"); } + } // Endpoint and credentials private string endpoint; - Dictionary headers; + private Dictionary headers; private string sessionKey; // Current transport client @@ -32,194 +39,222 @@ public class MessageStream { // - private void initializeMessageList() { + private void InitializeMessageList() + { currentMessageId = -1; largestMessageId = -1; messageQueue = new Dictionary(); confirmIds = new List(); - logger.debug("Initialized message queue"); + Logger.Debug("Initialized message queue"); } // Constructor - public MessageStream(TransportType transport = TransportType.LONGPOLLING) { + public MessageStream(TransportType transport = TransportType.LONGPOLLING) + { // - initializeMessageList(); + InitializeMessageList(); // Start transport client when session is acquired - mage.eventManager.on("session.set", (object sender, JToken session) => { + Mage.EventManager.On("session.set", (sender, session) => { sessionKey = UnityEngine.WWW.EscapeURL(session["key"].ToString()); - transportClient.start(); + transportClient.Start(); }); // Stop the message client when session is lost - mage.eventManager.on("session.unset", (object sender, JToken reason) => { - transportClient.stop(); - initializeMessageList(); + Mage.EventManager.On("session.unset", (sender, reason) => { + transportClient.Stop(); + InitializeMessageList(); sessionKey = null; }); // Also stop the message client when the application is stopped -#if UNITY_EDITOR - UnityEditorPlayMode.onEditorModeChanged += (EditorPlayModeState newState) => { - if (newState == EditorPlayModeState.Stopped) { - transportClient.stop(); - initializeMessageList(); + #if UNITY_EDITOR + UnityEditorPlayMode.OnEditorModeChanged += newState => { + if (newState == EditorPlayModeState.Stopped) + { + transportClient.Stop(); + InitializeMessageList(); sessionKey = null; } - if (newState == EditorPlayModeState.Paused && transportClient.running) { - transportClient.stop(); + if (newState == EditorPlayModeState.Paused && transportClient.running) + { + transportClient.Stop(); } - if (newState == EditorPlayModeState.Playing && !transportClient.running && sessionKey != null) { - transportClient.start(); + if (newState == EditorPlayModeState.Playing && !transportClient.running && sessionKey != null) + { + transportClient.Start(); } }; -#endif - UnityApplicationState.Instance.onAppStateChanged += (bool pauseStatus) => { - if (pauseStatus && transportClient.running) { - transportClient.stop(); + #endif + + UnityApplicationState.Instance.OnAppStateChanged += pauseStatus => { + if (pauseStatus && transportClient.running) + { + transportClient.Stop(); } - if (!pauseStatus && !transportClient.running && sessionKey != null) { - transportClient.start(); + if (!pauseStatus && !transportClient.running && sessionKey != null) + { + transportClient.Start(); } }; // Set the selected transport client (or the default) - this.SetTransport(transport); + SetTransport(transport); } // - public void Dispose() { + public void Dispose() + { // Stop the transport client if it exists - if (transportClient != null) { - transportClient.stop(); + if (transportClient != null) + { + transportClient.Stop(); } - initializeMessageList(); + InitializeMessageList(); sessionKey = null; } // Updates URI and credentials - public void SetEndpoint(string baseURL, Dictionary headers = null) { + public void SetEndpoint(string baseURL, Dictionary headers = null) + { this.endpoint = baseURL + "/msgstream"; this.headers = headers; } // Sets up given transport client type - public void SetTransport(TransportType transport) { + public void SetTransport(TransportType transport) + { // Stop existing transport client if any, when nulled out it will be collected // by garbage collecter after existing connections have been terminated. - if (transportClient != null) { - transportClient.stop(); + if (transportClient != null) + { + transportClient.Stop(); transportClient = null; } // Create new transport client instance - if (transport == TransportType.SHORTPOLLING) { - Func getShortPollingEndpoint = () => { - return getHttpPollingEndpoint("shortpolling"); - }; - - transportClient = new ShortPolling(getShortPollingEndpoint, getHttpHeaders, processMessagesString, 5000) as TransportClient; - } else if (transport == TransportType.LONGPOLLING) { - Func getLongPollingEndpoint = () => { - return getHttpPollingEndpoint("longpolling"); - }; - - transportClient = new LongPolling(getLongPollingEndpoint, getHttpHeaders, processMessagesString) as TransportClient; - } else { - throw new Exception("Invalid transport type: " + transport); + switch (transport) + { + case TransportType.SHORTPOLLING: + Func getShortPollingEndpoint = () => GetHttpPollingEndpoint("shortpolling"); + transportClient = new ShortPolling(getShortPollingEndpoint, GetHttpHeaders, ProcessMessagesString); + break; + case TransportType.LONGPOLLING: + Func getLongPollingEndpoint = () => GetHttpPollingEndpoint("longpolling"); + transportClient = new LongPolling(getLongPollingEndpoint, GetHttpHeaders, ProcessMessagesString); + break; + default: + throw new Exception("Invalid transport type: " + transport); } } // Returns the endpoint URL for polling transport clients i.e. longpolling and shortpolling - private string getHttpPollingEndpoint(string transport) { - string endpoint = this.endpoint + "?transport=" + transport + "&sessionKey=" + sessionKey; - if (confirmIds.Count > 0) { - endpoint += "&confirmIds=" + string.Join(",", confirmIds.ToArray()); + private string GetHttpPollingEndpoint(string transport) + { + string url = endpoint + "?transport=" + transport + "&sessionKey=" + sessionKey; + if (confirmIds.Count > 0) + { + url += "&confirmIds=" + string.Join(",", confirmIds.ToArray()); confirmIds.Clear(); } - return endpoint; + return url; } // Returns the required HTTP headers - private Dictionary getHttpHeaders() { + private Dictionary GetHttpHeaders() + { return headers; } // Deserilizes and processes given messagesString - private void processMessagesString(string messagesString) { - if (messagesString == "" || messagesString == null) { + private void ProcessMessagesString(string messagesString) + { + if (string.IsNullOrEmpty(messagesString)) + { return; } JObject messages = JObject.Parse(messagesString); - addMessages(messages); - processMessages(); + AddMessages(messages); + ProcessMessages(); } // Add list of messages to message queue - private void addMessages(JObject messages) { - if (messages == null) { + private void AddMessages(JObject messages) + { + if (messages == null) + { return; } int lowestMessageId = -1; - foreach (var message in messages) { + foreach (KeyValuePair message in messages) + { // Check if the messageId is lower than our current messageId int messageId = int.Parse(message.Key); - if (messageId == 0) { + if (messageId == 0) + { messageQueue.Add(messageId, message.Value); continue; } - if (messageId < currentMessageId) { + if (messageId < currentMessageId) + { continue; } // Keep track of the largest messageId in the list - if (messageId > largestMessageId) { + if (messageId > largestMessageId) + { largestMessageId = messageId; } // Keep track of the lowest messageId in the list - if (lowestMessageId == -1 || messageId < lowestMessageId) { + if (lowestMessageId == -1 || messageId < lowestMessageId) + { lowestMessageId = messageId; } // Check if the message exists in the queue, if not add it - if (!messageQueue.ContainsKey(messageId)) { + if (!messageQueue.ContainsKey(messageId)) + { messageQueue.Add(messageId, message.Value); } } // If the current messageId has never been set, set it to the current lowest - if (currentMessageId == -1) { + if (currentMessageId == -1) + { currentMessageId = lowestMessageId; } } // Process the message queue till we reach the end or a gap - private void processMessages() { + private void ProcessMessages() + { // Process all ordered messages in the order they appear - while (currentMessageId <= largestMessageId) { + while (currentMessageId <= largestMessageId) + { // Check if the next messageId exists - if (!messageQueue.ContainsKey(currentMessageId)) { + if (!messageQueue.ContainsKey(currentMessageId)) + { break; } // Process the message - mage.eventManager.emitEventList((JArray)messageQueue[currentMessageId]); + Mage.EventManager.EmitEventList((JArray)messageQueue[currentMessageId]); confirmIds.Add(currentMessageId.ToString()); messageQueue.Remove(currentMessageId); @@ -227,8 +262,9 @@ private void processMessages() { } // Finally emit any events that don't have an ID and thus don't need confirmation and lack order - if (messageQueue.ContainsKey(0)) { - mage.eventManager.emitEventList((JArray)messageQueue[0]); + if (messageQueue.ContainsKey(0)) + { + Mage.EventManager.EmitEventList((JArray)messageQueue[0]); messageQueue.Remove(0); } } diff --git a/Mage/MessageStream/TransportClient/LongPolling.cs b/Mage/MessageStream/TransportClient/LongPolling.cs index 51a2b0e..1edb388 100644 --- a/Mage/MessageStream/TransportClient/LongPolling.cs +++ b/Mage/MessageStream/TransportClient/LongPolling.cs @@ -5,127 +5,165 @@ using Wizcorp.MageSDK.Log; using Wizcorp.MageSDK.Network.Http; -namespace Wizcorp.MageSDK.MageClient.Message.Client { - public class LongPolling : TransportClient { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("longpolling"); } } +namespace Wizcorp.MageSDK.MageClient.Message.Client +{ + public class LongPolling : TransportClient + { + private static Mage Mage + { + get { return Mage.Instance; } + } + + private static Logger Logger + { + get { return Mage.Logger("longpolling"); } + } // Required functions for poll requests - private Func _getEndpoint; - private Func> _getHeaders; - private Action _processMessages; + private Func getEndpoint; + private Func> getHeaders; + private Action processMessages; // - HTTPRequest _currentRequest; + private HttpRequest currentRequest; // Required interval timer for polling delay - private int _errorInterval; - private Timer _intervalTimer; + private int errorInterval; + private Timer intervalTimer; // Constructor - public LongPolling(Func getEndpointFn, Func> getHeadersFn, Action processMessagesFn, int errorInterval = 5000) { - _getEndpoint = getEndpointFn; - _getHeaders = getHeadersFn; - _processMessages = processMessagesFn; - _errorInterval = errorInterval; + public LongPolling(Func getEndpointFn, Func> getHeadersFn, Action processMessagesFn, int errorInterval = 5000) + { + getEndpoint = getEndpointFn; + getHeaders = getHeadersFn; + processMessages = processMessagesFn; + this.errorInterval = errorInterval; } // Starts the poller - public override void start() { - if (_running == true) { + public override void Start() + { + if (_running) + { return; } - logger.debug("Starting"); + Logger.Debug("Starting"); _running = true; - requestLoop(); + RequestLoop(); } // Stops the poller - public override void stop() { + public override void Stop() + { _running = false; - logger.debug("Stopping..."); + Logger.Debug("Stopping..."); - if (_intervalTimer != null) { - _intervalTimer.Dispose(); - _intervalTimer = null; - } else { - logger.debug("Timer Stopped"); + if (intervalTimer != null) + { + intervalTimer.Dispose(); + intervalTimer = null; + } + else + { + Logger.Debug("Timer Stopped"); } - if (_currentRequest != null) { - _currentRequest.Abort(); - _currentRequest = null; - } else { - logger.debug("Connections Stopped"); + if (currentRequest != null) + { + currentRequest.Abort(); + currentRequest = null; + } + else + { + Logger.Debug("Connections Stopped"); } } // Queues the next poll request - private void queueNextRequest(int waitFor) { + private void QueueNextRequest(int waitFor) + { // Wait _requestInterval milliseconds till next poll - _intervalTimer = new Timer((object state) => { - requestLoop(); - }, null, waitFor, Timeout.Infinite); + intervalTimer = new Timer( + state => { + RequestLoop(); + }, + null, + waitFor, + Timeout.Infinite + ); } // Poller request function - private void requestLoop() { + private void RequestLoop() + { // Clear the timer - if (_intervalTimer != null) { - _intervalTimer.Dispose(); - _intervalTimer = null; + if (intervalTimer != null) + { + intervalTimer.Dispose(); + intervalTimer = null; } // Check if the poller should be running - if (_running == false) { - logger.debug("Stopped"); + if (_running == false) + { + Logger.Debug("Stopped"); return; } // Send poll request and wait for a response - string endpoint = _getEndpoint(); - logger.debug("Sending request: " + endpoint); - _currentRequest = HTTPRequest.Get(endpoint, _getHeaders(), mage.cookies, (Exception requestError, string responseString) => { - _currentRequest = null; + string endpoint = getEndpoint(); + Logger.Debug("Sending request: " + endpoint); + currentRequest = HttpRequest.Get(endpoint, getHeaders(), Mage.Cookies, (requestError, responseString) => { + currentRequest = null; // Ignore errors if we have been stopped - if (requestError != null && !_running) { - logger.debug("Stopped"); + if (requestError != null && !_running) + { + Logger.Debug("Stopped"); return; } - if (requestError != null) { - if (requestError is HTTPRequestException) { + if (requestError != null) + { + var requestHttpError = requestError as HttpRequestException; + if (requestHttpError != null) + { // Only log web exceptions if they aren't an empty response or gateway timeout - HTTPRequestException requestException = requestError as HTTPRequestException; - if (requestException.Status != 0 && requestException.Status != 504) { - logger.error("(" + requestException.Status.ToString() + ") " + requestError.Message); + if (requestHttpError.Status != 0 && requestHttpError.Status != 504) + { + Logger.Error("(" + requestHttpError.Status.ToString() + ") " + requestHttpError.Message); } - } else { - logger.error(requestError.ToString()); + } + else + { + Logger.Error(requestError.ToString()); } - queueNextRequest(_errorInterval); + QueueNextRequest(errorInterval); return; } // Call the message processer hook and re-call request loop function - try { - logger.verbose("Recieved response: " + responseString); - if (responseString != null) { - _processMessages(responseString); + try + { + Logger.Verbose("Recieved response: " + responseString); + if (responseString != null) + { + processMessages(responseString); } - requestLoop(); - } catch (Exception error) { - logger.error(error.ToString()); - queueNextRequest(_errorInterval); + RequestLoop(); + } + catch (Exception error) + { + Logger.Error(error.ToString()); + QueueNextRequest(errorInterval); } }); } diff --git a/Mage/MessageStream/TransportClient/ShortPolling.cs b/Mage/MessageStream/TransportClient/ShortPolling.cs index 346551e..f2daa61 100644 --- a/Mage/MessageStream/TransportClient/ShortPolling.cs +++ b/Mage/MessageStream/TransportClient/ShortPolling.cs @@ -1,105 +1,130 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Threading; using Wizcorp.MageSDK.Log; using Wizcorp.MageSDK.Network.Http; -namespace Wizcorp.MageSDK.MageClient.Message.Client { - public class ShortPolling : TransportClient { - private Mage mage { get { return Mage.Instance; } } - private Logger logger { get { return mage.logger("shortpolling"); } } +namespace Wizcorp.MageSDK.MageClient.Message.Client +{ + public class ShortPolling : TransportClient + { + private static Mage Mage + { + get { return Mage.Instance; } + } - // Whether or not the poller is working - private bool _running = false; + private static Logger Logger + { + get { return Mage.Logger("shortpolling"); } + } // Required functions for poll requests - private Func _getEndpoint; - private Func> _getHeaders; - private Action _processMessages; + private Func getEndpoint; + private Func> getHeaders; + private Action processMessages; // Required interval timer for polling delay - private int _requestInterval; - private int _errorInterval; - private Timer _intervalTimer; + private int requestInterval; + private int errorInterval; + private Timer intervalTimer; // Constructor - public ShortPolling(Func getEndpointFn, Func> getHeadersFn, Action processMessagesFn, int requestInterval = 5000, int errorInterval = 5000) { - _getEndpoint = getEndpointFn; - _getHeaders = getHeadersFn; - _processMessages = processMessagesFn; - _requestInterval = requestInterval; - _errorInterval = errorInterval; + public ShortPolling(Func getEndpointFn, Func> getHeadersFn, Action processMessagesFn, int requestInterval = 5000, int errorInterval = 5000) + { + getEndpoint = getEndpointFn; + getHeaders = getHeadersFn; + processMessages = processMessagesFn; + this.requestInterval = requestInterval; + this.errorInterval = errorInterval; } // Starts the poller - public override void start() { - if (_running == true) { + public override void Start() + { + if (_running) + { return; } - logger.debug("Starting"); + Logger.Debug("Starting"); _running = true; - requestLoop(); + RequestLoop(); } // Stops the poller - public override void stop() { - if (_intervalTimer != null) { - _intervalTimer.Dispose(); - _intervalTimer = null; - logger.debug("Stopped"); - } else { - logger.debug("Stopping..."); + public override void Stop() + { + if (intervalTimer != null) + { + intervalTimer.Dispose(); + intervalTimer = null; + Logger.Debug("Stopped"); + } + else + { + Logger.Debug("Stopping..."); } _running = false; } // Queues the next poll request - private void queueNextRequest(int waitFor) { - // Wait _requestInterval milliseconds till next poll - _intervalTimer = new Timer((object state) => { - requestLoop(); - }, null, waitFor, Timeout.Infinite); + private void QueueNextRequest(int waitFor) + { + // Wait n milliseconds till next poll + intervalTimer = new Timer( + state => { + RequestLoop(); + }, + null, + waitFor, + Timeout.Infinite + ); } // Poller request function - private void requestLoop() { + private void RequestLoop() + { // Clear the timer - if (_intervalTimer != null) { - _intervalTimer.Dispose(); - _intervalTimer = null; + if (intervalTimer != null) + { + intervalTimer.Dispose(); + intervalTimer = null; } // Check if the poller should be running - if (_running == false) { - logger.debug("Stopped"); + if (_running == false) + { + Logger.Debug("Stopped"); return; } // Send poll request and wait for a response - string endpoint = _getEndpoint(); - logger.debug("Sending request: " + endpoint); - HTTPRequest.Get(endpoint, _getHeaders(), mage.cookies, (Exception requestError, string responseString) => { - if (requestError != null) { - logger.error(requestError.ToString()); - queueNextRequest(_errorInterval); + string endpoint = getEndpoint(); + Logger.Debug("Sending request: " + endpoint); + HttpRequest.Get(endpoint, getHeaders(), Mage.Cookies, (requestError, responseString) => { + if (requestError != null) + { + Logger.Error(requestError.ToString()); + QueueNextRequest(errorInterval); return; } // Call the message processer hook and queue the next request - try { - _processMessages(responseString); - queueNextRequest(_requestInterval); - } catch (Exception error) { - logger.data(responseString).error(error.ToString()); - queueNextRequest(_errorInterval); + try + { + processMessages(responseString); + QueueNextRequest(requestInterval); + } + catch (Exception error) + { + Logger.Data(responseString).Error(error.ToString()); + QueueNextRequest(errorInterval); } }); } diff --git a/Mage/MessageStream/TransportClient/TransportClient.cs b/Mage/MessageStream/TransportClient/TransportClient.cs index 9ba9c96..7c91f95 100644 --- a/Mage/MessageStream/TransportClient/TransportClient.cs +++ b/Mage/MessageStream/TransportClient/TransportClient.cs @@ -1,16 +1,11 @@ -using System; - -namespace Wizcorp.MageSDK.MageClient.Message.Client { - public enum TransportType { - SHORTPOLLING, - LONGPOLLING - } - - public abstract class TransportClient { +namespace Wizcorp.MageSDK.MageClient.Message.Client +{ + public abstract class TransportClient + { protected bool _running; public bool running { get { return _running; } } - public abstract void stop(); - public abstract void start(); + public abstract void Stop(); + public abstract void Start(); } } diff --git a/Mage/MessageStream/TransportClient/TransportType.cs b/Mage/MessageStream/TransportClient/TransportType.cs new file mode 100644 index 0000000..39d907c --- /dev/null +++ b/Mage/MessageStream/TransportClient/TransportType.cs @@ -0,0 +1,8 @@ +namespace Wizcorp.MageSDK.MageClient.Message.Client +{ + public enum TransportType + { + SHORTPOLLING, + LONGPOLLING + } +} diff --git a/Mage/Module.cs b/Mage/Module.cs index 0e29be0..460aeff 100644 --- a/Mage/Module.cs +++ b/Mage/Module.cs @@ -6,105 +6,135 @@ using Wizcorp.MageSDK.Log; using Wizcorp.MageSDK.Utils; -namespace Wizcorp.MageSDK.MageClient { - public class UsercommandStatus { - public bool done = false; - public Exception error = null; - public JToken result = null; - } - +namespace Wizcorp.MageSDK.MageClient +{ - public class Module : Singleton where T : class, new() { + public class Module : Singleton where T : class, new() + { // - protected Mage mage { get { return Mage.Instance; } } - protected Logger logger { get { return mage.logger(this.GetType().Name); } } + protected Mage Mage + { + get { return Mage.Instance; } + } + + protected Logger Logger + { + get { return Mage.Logger(GetType().Name); } + } // - protected virtual List staticTopics { get { return null; } } - public JToken staticData; - public void setupStaticData(Action cb) { - logger.info("Setting up static data"); + protected virtual List StaticTopics + { + get { return null; } + } + + public JToken StaticData; - if (staticTopics == null) { + public void SetupStaticData(Action cb) + { + Logger.Info("Setting up static data"); + + if (StaticTopics == null) + { cb(null); return; } - JObject queries = new JObject(); - for (int i = 0; i < staticTopics.Count; i++) { - string topic = staticTopics[i]; + var queries = new JObject(); + for (var i = 0; i < StaticTopics.Count; i++) + { + string topic = StaticTopics[i]; - JObject query = new JObject(); - query.Add("topic", new JValue(topic)); - query.Add("index", new JObject()); + var query = new JObject { + {"topic", new JValue(topic)}, + {"index", new JObject()} + }; queries.Add(topic, query); } - staticData = null; - mage.archivist.mget(queries, null, (Exception error, JToken data) => { - if (error != null) { + StaticData = null; + Mage.Archivist.MGet(queries, null, (error, data) => { + if (error != null) + { cb(error); return; } - staticData = data; + StaticData = data; cb(null); }); } // - protected virtual string commandPrefix { get { return null; } } - protected virtual List commands { get { return null; } } + protected virtual string CommandPrefix + { + get { return null; } + } + + protected virtual List Commands + { + get { return null; } + } + private Dictionary>> commandHandlerActions; - private Dictionary> commandHandlerFuncs; + private Dictionary> commandHandlerFuncs; - public void command(string commandName, JObject arguments, Action cb) { + public void Command(string commandName, JObject arguments, Action cb) + { commandHandlerActions[commandName](arguments, cb); } - public UsercommandStatus command(string commandName, JObject arguments) { + public UserCommandStatus Command(string commandName, JObject arguments) + { return commandHandlerFuncs[commandName](arguments); } - private void registerCommand(string command) { - commandHandlerActions.Add(command, (JObject arguments, Action commandCb) => { - mage.commandCenter.SendCommand(commandPrefix + "." + command, arguments, (Exception error, JToken result) => { - try { + private void RegisterCommand(string command) + { + commandHandlerActions.Add(command, (arguments, commandCb) => { + Mage.CommandCenter.SendCommand(CommandPrefix + "." + command, arguments, (error, result) => { + try + { commandCb(error, result); - } catch (Exception callbackError) { - logger.data(callbackError).critical("Uncaught exception:"); + } + catch (Exception callbackError) + { + Logger.Data(callbackError).Critical("Uncaught exception:"); } }); }); - commandHandlerFuncs.Add(command, (JObject arguments) => { - UsercommandStatus commandStatus = new UsercommandStatus(); + commandHandlerFuncs.Add(command, arguments => { + var commandStatus = new UserCommandStatus(); - mage.commandCenter.SendCommand(commandPrefix + "." + command, arguments, (Exception error, JToken result) => { - commandStatus.error = error; - commandStatus.result = result; - commandStatus.done = true; + Mage.CommandCenter.SendCommand(CommandPrefix + "." + command, arguments, (error, result) => { + commandStatus.Error = error; + commandStatus.Result = result; + commandStatus.Done = true; }); return commandStatus; }); } - public void setupUsercommands(Action cb) { - logger.info("Setting up usercommands"); + public void SetupUsercommands(Action cb) + { + Logger.Info("Setting up usercommands"); commandHandlerActions = new Dictionary>>(); - commandHandlerFuncs = new Dictionary>(); + commandHandlerFuncs = new Dictionary>(); - if (commands == null) { + if (Commands == null) + { cb(null); return; } - foreach (string command in commands) { - registerCommand(command); + foreach (string command in Commands) + { + RegisterCommand(command); } cb(null); diff --git a/Mage/Session.cs b/Mage/Session.cs index 12d3774..6663cd9 100644 --- a/Mage/Session.cs +++ b/Mage/Session.cs @@ -1,45 +1,54 @@ using System.Collections.Generic; -using Newtonsoft.Json.Linq; +namespace Wizcorp.MageSDK.MageClient +{ + public class Session + { + private Mage Mage + { + get { return Mage.Instance; } + } -namespace Wizcorp.MageSDK.MageClient { - public class Session { - private Mage mage { get { return Mage.Instance; } } // private string sessionKey; private string actorId; + // - public Session() { - mage.eventManager.on("session.set", (object sender, JToken session) => { + public Session() + { + Mage.EventManager.On("session.set", (sender, session) => { actorId = session["actorId"].ToString(); sessionKey = session["key"].ToString(); }); - mage.eventManager.on("session.unset", (object sender, JToken reason) => { + Mage.EventManager.On("session.unset", (sender, reason) => { actorId = null; sessionKey = null; }); - mage.commandCenter.preSerialiseHook += (CommandBatch commandBatch) => { - if (!string.IsNullOrEmpty(sessionKey)) { + Mage.CommandCenter.preSerialiseHook += (commandBatch) => { + if (!string.IsNullOrEmpty(sessionKey)) + { Dictionary sessionHeader = new Dictionary(); sessionHeader.Add("name", "mage.session"); sessionHeader.Add("key", sessionKey); - commandBatch.batchHeaders.Add(sessionHeader); + commandBatch.BatchHeaders.Add(sessionHeader); } }; } // - public string GetSessionKey() { + public string GetSessionKey() + { return sessionKey; } // - public string GetActorId() { + public string GetActorId() + { return actorId; } } diff --git a/Mage/UserCommandStatus.cs b/Mage/UserCommandStatus.cs new file mode 100644 index 0000000..16636c3 --- /dev/null +++ b/Mage/UserCommandStatus.cs @@ -0,0 +1,13 @@ +using System; + +using Newtonsoft.Json.Linq; + +namespace Wizcorp.MageSDK.MageClient +{ + public class UserCommandStatus + { + public bool Done = false; + public Exception Error = null; + public JToken Result = null; + } +} diff --git a/Singleton/MonoSingleton.cs b/Singleton/MonoSingleton.cs index ec841f1..6855fee 100644 --- a/Singleton/MonoSingleton.cs +++ b/Singleton/MonoSingleton.cs @@ -1,40 +1,49 @@ using UnityEngine; -namespace Wizcorp.MageSDK.Utils { - public class MonoSingleton : MonoBehaviour where T : MonoBehaviour { +namespace Wizcorp.MageSDK.Utils +{ + public class MonoSingleton : MonoBehaviour where T : MonoBehaviour + { // Instance functions - protected static T _Instance; - public static T Instance { - get { - if (_Instance == null) { + protected static T instance; + public static T Instance + { + get + { + if (instance == null) + { Instantiate(); } - return _Instance; + return instance; } } // Instantiation function if you need to pre-instantiate rather than on demand - public static void Instantiate() { - if (_Instance != null) { + public static void Instantiate() + { + if (instance != null) + { return; } - GameObject newObject = new GameObject(typeof(T).Name); - GameObject.DontDestroyOnLoad(newObject); + var newObject = new GameObject(typeof(T).Name); + DontDestroyOnLoad(newObject); - _Instance = newObject.AddComponent(); + instance = newObject.AddComponent(); } // Use this for initialization before any start methods are called - protected virtual void Awake() { - if (_Instance != null) { - GameObject.DestroyImmediate(gameObject); + protected virtual void Awake() + { + if (instance != null) + { + DestroyImmediate(gameObject); return; } - _Instance = (T)(object)this; - GameObject.DontDestroyOnLoad(gameObject); + instance = (T)(object)this; + DontDestroyOnLoad(gameObject); } } } diff --git a/Singleton/SceneInstance.cs b/Singleton/SceneInstance.cs index 1e62c99..728aed2 100644 --- a/Singleton/SceneInstance.cs +++ b/Singleton/SceneInstance.cs @@ -1,19 +1,26 @@ using UnityEngine; -namespace Wizcorp.MageSDK.Utils { - public class SceneInstance : MonoBehaviour where T : class { +namespace Wizcorp.MageSDK.Utils +{ + public class SceneInstance : MonoBehaviour where T : class + { // - protected static T _Instance = null; - public static T Instance { get { return _Instance; } } + protected static T instance; + public static T Instance + { + get { return instance; } + } // Use this for initialization before any start methods are called - protected virtual void Awake() { - _Instance = (T)(object)this; + protected virtual void Awake() + { + instance = (T)(object)this; } // Use this for destruction - protected virtual void OnDestroy() { - _Instance = null; + protected virtual void OnDestroy() + { + instance = null; } } } diff --git a/Singleton/Singleton.cs b/Singleton/Singleton.cs index 2bae7c4..bbba51c 100644 --- a/Singleton/Singleton.cs +++ b/Singleton/Singleton.cs @@ -1,22 +1,18 @@ -using UnityEngine; - -namespace Wizcorp.MageSDK.Utils { - public class Singleton where T : class, new() { +namespace Wizcorp.MageSDK.Utils +{ + public class Singleton where T : class, new() + { // Instance functions - private static T _Instance; - public static T Instance { - get { - if (_Instance == null) { - _Instance = new T(); - } - - return _Instance; - } + private static T instance; + public static T Instance + { + get { return instance ?? (instance = new T()); } } // Hack which makes sure the _instance property is set during the T class constructor - public Singleton() { - _Instance = (T)(object)this; + protected Singleton() + { + instance = (T)(object)this; } } } diff --git a/Tomes/Tome.cs b/Tomes/Tome.cs index 16007ea..261af76 100644 --- a/Tomes/Tome.cs +++ b/Tomes/Tome.cs @@ -3,16 +3,20 @@ using Newtonsoft.Json.Linq; -namespace Wizcorp.MageSDK.Tomes { - public class Tome { +namespace Wizcorp.MageSDK.Tomes +{ + public class Tome + { public delegate void OnChanged(JToken oldValue); public delegate void OnDestroy(); public delegate void OnAdd(JToken key); public delegate void OnDel(JToken key); // - public static JToken Conjure(JToken data, JToken root = null) { - switch (data.Type) { + public static JToken Conjure(JToken data, JToken root = null) + { + switch (data.Type) + { case JTokenType.Array: return new TomeArray((JArray)data, root); case JTokenType.Object: @@ -23,23 +27,27 @@ public static JToken Conjure(JToken data, JToken root = null) { } // - public static void Destroy(JToken data) { - switch (data.Type) { + public static void Destroy(JToken data) + { + switch (data.Type) + { case JTokenType.Array: - (data as TomeArray).Destroy(); + ((TomeArray)data).Destroy(); break; case JTokenType.Object: - (data as TomeObject).Destroy(); + ((TomeObject)data).Destroy(); break; default: - (data as TomeValue).Destroy(); + ((TomeValue)data).Destroy(); break; } } // - public static JToken PathValue(JToken value, JArray paths) { - foreach (JToken path in paths) { + public static JToken PathValue(JToken value, JArray paths) + { + foreach (JToken path in paths) + { value = PathValue(value, path); } @@ -47,8 +55,10 @@ public static JToken PathValue(JToken value, JArray paths) { } // - public static JToken PathValue(JToken value, List paths) { - foreach (string path in paths) { + public static JToken PathValue(JToken value, List paths) + { + foreach (string path in paths) + { value = PathValue(value, path); } @@ -56,8 +66,10 @@ public static JToken PathValue(JToken value, List paths) { } // - public static JToken PathValue(JToken value, JToken key) { - if (value.Type == JTokenType.Array) { + public static JToken PathValue(JToken value, JToken key) + { + if (value.Type == JTokenType.Array) + { return value[(int)key]; } @@ -65,8 +77,10 @@ public static JToken PathValue(JToken value, JToken key) { } // - public static JToken PathValue(JToken value, string key) { - if (value.Type == JTokenType.Array) { + public static JToken PathValue(JToken value, string key) + { + if (value.Type == JTokenType.Array) + { return value[int.Parse(key)]; } @@ -74,18 +88,22 @@ public static JToken PathValue(JToken value, string key) { } // - public static void EmitParentChange(JToken parent) { - switch (parent.Type) { + public static void EmitParentChange(JToken parent) + { + switch (parent.Type) + { case JTokenType.Array: - TomeArray parentArray = parent as TomeArray; - if (parentArray.onChanged != null) { - parentArray.onChanged.Invoke(null); + var parentArray = (TomeArray)parent; + if (parentArray.OnChanged != null) + { + parentArray.OnChanged.Invoke(null); } break; case JTokenType.Object: - TomeObject parentObject = parent as TomeObject; - if (parentObject.onChanged != null) { - parentObject.onChanged.Invoke(null); + var parentObject = (TomeObject)parent; + if (parentObject.OnChanged != null) + { + parentObject.OnChanged.Invoke(null); } break; case JTokenType.Property: @@ -97,26 +115,32 @@ public static void EmitParentChange(JToken parent) { } // - public static void ApplyDiff(JToken root, JArray operations) { - foreach (JObject operation in operations) { - try { + public static void ApplyDiff(JToken root, JArray operations) + { + foreach (JObject operation in operations) + { + try + { JToken value = PathValue(root, (JArray)operation["chain"]); string op = operation["op"].ToString(); JToken val = operation["val"]; - switch (value.Type) { + switch (value.Type) + { case JTokenType.Array: - (value as TomeArray).ApplyOperation(op, val, root); + ((TomeArray)value).ApplyOperation(op, val, root); break; case JTokenType.Object: - (value as TomeObject).ApplyOperation(op, val, root); + ((TomeObject)value).ApplyOperation(op, val, root); break; default: - (value as TomeValue).ApplyOperation(op, val); + ((TomeValue)value).ApplyOperation(op, val); break; } - } catch (Exception diffError) { + } + catch (Exception diffError) + { // TODO: NEED TO DECIDE IF TOMES SHOULD BE STANDALONE OR INSIDE MAGE. // e.g. should it depend on mage.logger or UnityEngine.Debug for logging? UnityEngine.Debug.LogError("Failed to apply diff operation:"); @@ -124,7 +148,7 @@ public static void ApplyDiff(JToken root, JArray operations) { UnityEngine.Debug.LogError(diffError); UnityEngine.Debug.LogError(root); UnityEngine.Debug.LogError(PathValue(root, (JArray)operation["chain"])); - throw diffError; + throw; } } } diff --git a/Tomes/TomeArray.cs b/Tomes/TomeArray.cs index feac101..06dea97 100644 --- a/Tomes/TomeArray.cs +++ b/Tomes/TomeArray.cs @@ -1,134 +1,160 @@ using System; +using System.Collections.Generic; using Newtonsoft.Json.Linq; using Wizcorp.MageSDK.MageClient; -namespace Wizcorp.MageSDK.Tomes { - public class TomeArray : JArray { +namespace Wizcorp.MageSDK.Tomes +{ + public class TomeArray : JArray + { // - public Tome.OnChanged onChanged; - public Tome.OnDestroy onDestroy; - public Tome.OnAdd onAdd; - public Tome.OnDel onDel; + public Tome.OnChanged OnChanged; + public Tome.OnDestroy OnDestroy; + public Tome.OnAdd OnAdd; + public Tome.OnDel OnDel; // private JToken root; - // - public TomeArray(JArray data, JToken _root) { + public TomeArray(JArray data, JToken root) + { // - root = _root; - if (root == null) { - root = this; + this.root = root; + if (this.root == null) + { + this.root = this; } // - for (int i = 0; i < data.Count; i += 1) { - this.Add(Tome.Conjure(data[i], root)); + for (var i = 0; i < data.Count; i += 1) + { + Add(Tome.Conjure(data[i], root)); } // - onChanged += EmitToParents; - onAdd += EmitChanged; - onDel += EmitChanged; + OnChanged += EmitToParents; + OnAdd += EmitChanged; + OnDel += EmitChanged; } // - private void EmitToParents(JToken oldValue) { - if (this != root) { + private void EmitToParents(JToken oldValue) + { + if (this != root) + { Tome.EmitParentChange(Parent); } } // - private void EmitChanged(JToken key) { - if (onChanged != null) { - onChanged.Invoke(null); + private void EmitChanged(JToken key) + { + if (OnChanged != null) + { + OnChanged.Invoke(null); } } - // - public void Assign(JToken newValue) { - lock ((object)this) { - switch (newValue.Type) { + public void Assign(JToken newValue) + { + lock ((object)this) + { + switch (newValue.Type) + { case JTokenType.Array: - TomeArray newTomeArray = new TomeArray((JArray)newValue, root); - this.Replace(newTomeArray); + var newTomeArray = new TomeArray((JArray)newValue, root); + Replace(newTomeArray); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeArray.onChanged; - newTomeArray.onChanged = onChanged; - newTomeArray.onDestroy = onDestroy; - onAdd -= EmitChanged; - onAdd += newTomeArray.onAdd; - newTomeArray.onAdd = onAdd; - onDel -= EmitChanged; - onDel += newTomeArray.onDel; - newTomeArray.onDel = onDel; - - if (newTomeArray.onChanged != null) { - newTomeArray.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeArray.OnChanged; + newTomeArray.OnChanged = OnChanged; + newTomeArray.OnDestroy = OnDestroy; + OnAdd -= EmitChanged; + OnAdd += newTomeArray.OnAdd; + newTomeArray.OnAdd = OnAdd; + OnDel -= EmitChanged; + OnDel += newTomeArray.OnDel; + newTomeArray.OnDel = OnDel; + + if (newTomeArray.OnChanged != null) + { + newTomeArray.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; case JTokenType.Object: - TomeObject newTomeObject = new TomeObject((JObject)newValue, root); - this.Replace(newTomeObject); + var newTomeObject = new TomeObject((JObject)newValue, root); + Replace(newTomeObject); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeObject.onChanged; - newTomeObject.onChanged = onChanged; - newTomeObject.onDestroy = onDestroy; - onAdd -= EmitChanged; - onAdd += newTomeObject.onAdd; - newTomeObject.onAdd = onAdd; - onDel -= EmitChanged; - onDel += newTomeObject.onDel; - newTomeObject.onDel = onDel; - - if (newTomeObject.onChanged != null) { - newTomeObject.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeObject.OnChanged; + newTomeObject.OnChanged = OnChanged; + newTomeObject.OnDestroy = OnDestroy; + OnAdd -= EmitChanged; + OnAdd += newTomeObject.OnAdd; + newTomeObject.OnAdd = OnAdd; + OnDel -= EmitChanged; + OnDel += newTomeObject.OnDel; + newTomeObject.OnDel = OnDel; + + if (newTomeObject.OnChanged != null) + { + newTomeObject.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; default: - TomeValue newTomeValue = new TomeValue((JValue)newValue, root); - this.Replace(newTomeValue); + var newTomeValue = new TomeValue((JValue)newValue, root); + Replace(newTomeValue); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeValue.onChanged; - newTomeValue.onChanged = onChanged; - newTomeValue.onDestroy = onDestroy; - - if (newTomeValue.onChanged != null) { - newTomeValue.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeValue.OnChanged; + newTomeValue.OnChanged = OnChanged; + newTomeValue.OnDestroy = OnDestroy; + + if (newTomeValue.OnChanged != null) + { + newTomeValue.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; @@ -137,93 +163,122 @@ public void Assign(JToken newValue) { } // - public void Destroy() { - lock ((object)this) { - foreach (JToken value in this) { + public void Destroy() + { + lock ((object)this) + { + foreach (JToken value in this) + { Tome.Destroy(value); } - if (onDestroy != null) { - onDestroy.Invoke(); + if (OnDestroy != null) + { + OnDestroy.Invoke(); } - onChanged = null; - onDestroy = null; - onAdd = null; - onDel = null; + OnChanged = null; + OnDestroy = null; + OnAdd = null; + OnDel = null; } } // - public void Set(int index, JToken value) { - lock ((object)this) { + public void Set(int index, JToken value) + { + lock ((object)this) + { // Make sure the property exists, filling in missing indexes - if (this.Count <= index) { - while (this.Count < index) { - this.Add(Tome.Conjure(JValue.CreateNull(), root)); + if (Count <= index) + { + while (Count < index) + { + Add(Tome.Conjure(JValue.CreateNull(), root)); } - this.Add(Tome.Conjure(value, root)); - if (onAdd != null) { - onAdd.Invoke(index); + Add(Tome.Conjure(value, root)); + if (OnAdd != null) + { + OnAdd.Invoke(index); } return; } // Assign the property JToken property = this[index]; - switch (property.Type) { + switch (property.Type) + { case JTokenType.Array: - (property as TomeArray).Assign(value); + ((TomeArray)property).Assign(value); break; case JTokenType.Object: - (property as TomeObject).Assign(value); + ((TomeObject)property).Assign(value); break; default: - if ((property as TomeValue) == null) { - Mage.Instance.logger("Tomes").data(property).error("property is not a tome value: " + index.ToString()); + var tomeValue = property as TomeValue; + if (tomeValue == null) + { + Mage.Instance.Logger("Tomes").Data(property).Error("property is not a tome value: " + index.ToString()); UnityEngine.Debug.Log(this); } - (property as TomeValue).Assign(value); + else + { + tomeValue.Assign(value); + } break; } } } // - public void Del(int index) { - lock ((object)this) { + public void Del(int index) + { + lock ((object)this) + { JToken property = this[index]; - switch (property.Type) { + switch (property.Type) + { case JTokenType.Array: - (property as TomeArray).Destroy(); + ((TomeArray)property).Destroy(); break; case JTokenType.Object: - (property as TomeObject).Destroy(); + ((TomeObject)property).Destroy(); break; default: - if ((property as TomeValue) == null) { - Mage.Instance.logger("Tomes").data(property).error("property is not a tome value:" + index.ToString()); + var tomeValue = property as TomeValue; + if (tomeValue == null) + { + Mage.Instance.Logger("Tomes").Data(property).Error("property is not a tome value:" + index.ToString()); UnityEngine.Debug.Log(this); } - (property as TomeValue).Destroy(); + else + { + tomeValue.Destroy(); + } break; } this[index].Replace(JValue.CreateNull()); - if (onDel != null) { - onDel.Invoke(index); + if (OnDel != null) + { + OnDel.Invoke(index); } } } // - public void Move(int fromKey, JToken newParent, JToken newKey) { - lock ((object)this) { - if (newParent.Type == JTokenType.Array) { - (newParent as TomeArray).Set((int)newKey, this[fromKey]); - } else { - (newParent as TomeObject).Set((string)newKey, this[fromKey]); + public void Move(int fromKey, JToken newParent, JToken newKey) + { + lock ((object)this) + { + if (newParent.Type == JTokenType.Array) + { + ((TomeArray)newParent).Set((int)newKey, this[fromKey]); + } + else + { + ((TomeObject)newParent).Set((string)newKey, this[fromKey]); } Del(fromKey); @@ -231,8 +286,10 @@ public void Move(int fromKey, JToken newParent, JToken newKey) { } // - public void Rename(int wasKey, int isKey) { - lock ((object)this) { + public void Rename(int wasKey, int isKey) + { + lock ((object)this) + { JToken wasValue = this[wasKey]; Del(wasKey); Set(isKey, wasValue); @@ -240,39 +297,49 @@ public void Rename(int wasKey, int isKey) { } // - public void Swap(int firstKey, JToken secondParent, JToken secondKey) { - lock ((object)this) { + public void Swap(int firstKey, JToken secondParent, JToken secondKey) + { + lock ((object)this) + { JToken secondValue; - if (secondParent.Type == JTokenType.Array) { + if (secondParent.Type == JTokenType.Array) + { secondValue = secondParent[(int)secondKey]; secondParent[(int)secondKey].Replace(this[firstKey]); - } else { + } + else + { secondValue = secondParent[(string)secondKey]; secondParent[(string)secondKey].Replace(this[firstKey]); } this[firstKey].Replace(secondValue); - if (onChanged != null) { - onChanged.Invoke(null); + if (OnChanged != null) + { + OnChanged.Invoke(null); } } } // - public void Push(JToken item) { - lock ((object)this) { - this.Set(this.Count, item); + public void Push(JToken item) + { + lock ((object)this) + { + Set(Count, item); } } // NOTE: Tome behavior for a del operation is to replace values with null. // However a pop operation does in fact remove the item as well as // firing the del event. Thus we do both below. - public JToken Pop() { - lock ((object)this) { - JToken last = this[this.Count - 1]; - this.Del(this.Count - 1); - this.Last.Remove(); + public JToken Pop() + { + lock ((object)this) + { + JToken last = this[Count - 1]; + Del(Count - 1); + Last.Remove(); return last; } } @@ -280,45 +347,58 @@ public JToken Pop() { // NOTE: Tome behavior for a del operation is to replace values with null. // However a shift operation does in fact remove the item as well as // firing the del event. Thus we do both below. - public JToken Shift() { - lock ((object)this) { + public JToken Shift() + { + lock ((object)this) + { JToken first = this[0]; - this.Del(0); - this.First.Remove(); + Del(0); + First.Remove(); return first; } } // - public void UnShift(JToken item) { - lock ((object)this) { - this.AddFirst(Tome.Conjure(item, root)); - if (onAdd != null) { - onAdd.Invoke(0); + public void UnShift(JToken item) + { + lock ((object)this) + { + AddFirst(Tome.Conjure(item, root)); + if (OnAdd != null) + { + OnAdd.Invoke(0); } } } // - public void Reverse() { - lock ((object)this) { - JArray oldOrder = new JArray(this as JArray); - for (int i = oldOrder.Count; i > 0; i -= 1) { + public void Reverse() + { + lock ((object)this) + { + var oldOrder = new JArray(this); + for (int i = oldOrder.Count; i > 0; i -= 1) + { this[oldOrder.Count - i].Replace(oldOrder[i - 1]); } - if (onChanged != null) { - onChanged.Invoke(null); + if (OnChanged != null) + { + OnChanged.Invoke(null); } } } // - public void Splice(int index, int deleteCount, JArray insertItems) { - lock ((object)this) { + public void Splice(int index, int deleteCount, JArray insertItems) + { + lock ((object)this) + { // Delete given item count starting at given index - for (int delI = index + deleteCount - 1; delI >= index; delI -= 1) { - if (delI > this.Count - 1) { + for (int delI = index + deleteCount - 1; delI >= index; delI -= 1) + { + if (delI > Count - 1) + { continue; } @@ -327,11 +407,13 @@ public void Splice(int index, int deleteCount, JArray insertItems) { } // Insert given items starting at given index - for (int addI = 0; addI < insertItems.Count; addI += 1) { + for (var addI = 0; addI < insertItems.Count; addI += 1) + { int insertI = index + addI; - this.Insert(insertI, Tome.Conjure(insertItems[addI])); - if (onAdd != null) { - onAdd.Invoke(insertI); + Insert(insertI, Tome.Conjure(insertItems[addI])); + if (OnAdd != null) + { + OnAdd.Invoke(insertI); } } } @@ -339,11 +421,15 @@ public void Splice(int index, int deleteCount, JArray insertItems) { // We implement this as when using JArray.IndexOf(JToken) it compares the reference but not the value. - public int IndexOf(string lookFor) { - lock ((object)this) { - for (int i = 0; i < this.Count; i += 1) { + public int IndexOf(string lookFor) + { + lock ((object)this) + { + for (var i = 0; i < Count; i += 1) + { JToken value = this[i]; - if (value.Type == JTokenType.String && (string)value == lookFor) { + if (value.Type == JTokenType.String && (string)value == lookFor) + { return i; } } @@ -354,9 +440,12 @@ public int IndexOf(string lookFor) { // - public void ApplyOperation(string op, JToken val, JToken root) { - lock ((object)this) { - switch (op) { + public void ApplyOperation(string op, JToken val, JToken root) + { + lock ((object)this) + { + switch (op) + { case "assign": Assign(val); break; @@ -370,29 +459,31 @@ public void ApplyOperation(string op, JToken val, JToken root) { break; case "move": - int fromKey = (int)val["key"]; + var fromKey = (int)val["key"]; JToken newParent = Tome.PathValue(root, val["newParent"] as JArray); JToken toKey = (val["newKey"] != null) ? val["newKey"] : new JValue(fromKey); Move(fromKey, newParent, toKey); break; case "rename": - foreach (var property in val as JObject) { + foreach (KeyValuePair property in (JObject)val) + { int wasKey = int.Parse(property.Key); - int isKey = (int)property.Value; + var isKey = (int)property.Value; Rename(wasKey, isKey); } break; case "swap": - int firstKey = (int)val["key"]; + var firstKey = (int)val["key"]; JToken secondParent = Tome.PathValue(root, val["newParent"] as JArray); JToken secondKey = (val["newKey"] != null) ? val["newKey"] : new JValue(firstKey); Swap(firstKey, secondParent, secondKey); break; case "push": - foreach (JToken item in val as JArray) { + foreach (JToken item in (JArray)val) + { Push(item); } break; @@ -406,8 +497,9 @@ public void ApplyOperation(string op, JToken val, JToken root) { break; case "unshift": - JArray unshiftItems = val as JArray; - for (int i = unshiftItems.Count; i > 0; i -= 1) { + var unshiftItems = val as JArray; + for (int i = unshiftItems.Count; i > 0; i -= 1) + { UnShift(unshiftItems[i - 1]); } break; @@ -417,10 +509,10 @@ public void ApplyOperation(string op, JToken val, JToken root) { break; case "splice": - int index = (int)val[0]; - int deleteCount = (int)val[1]; + var index = (int)val[0]; + var deleteCount = (int)val[1]; - JArray items = new JArray(val as JArray); + var items = new JArray(val as JArray); items.First.Remove(); items.First.Remove(); diff --git a/Tomes/TomeObject.cs b/Tomes/TomeObject.cs index 92551f7..0dfeff6 100644 --- a/Tomes/TomeObject.cs +++ b/Tomes/TomeObject.cs @@ -5,131 +5,158 @@ using Wizcorp.MageSDK.MageClient; -namespace Wizcorp.MageSDK.Tomes { - public class TomeObject : JObject { +namespace Wizcorp.MageSDK.Tomes +{ + public class TomeObject : JObject + { // - public Tome.OnChanged onChanged; - public Tome.OnDestroy onDestroy; - public Tome.OnAdd onAdd; - public Tome.OnDel onDel; + public Tome.OnChanged OnChanged; + public Tome.OnDestroy OnDestroy; + public Tome.OnAdd OnAdd; + public Tome.OnDel OnDel; // private JToken root; // - public TomeObject(JObject data, JToken _root) { + public TomeObject(JObject data, JToken root) + { // - root = _root; - if (root == null) { - root = this; + this.root = root; + if (this.root == null) + { + this.root = this; } // - foreach (JProperty property in data.Properties()) { - this.Add(property.Name, Tome.Conjure(property.Value, root)); + foreach (JProperty property in data.Properties()) + { + Add(property.Name, Tome.Conjure(property.Value, root)); } // - onChanged += EmitToParents; - onAdd += EmitChanged; - onDel += EmitChanged; + OnChanged += EmitToParents; + OnAdd += EmitChanged; + OnDel += EmitChanged; } // - private void EmitToParents(JToken oldValue) { - if (this != root) { + private void EmitToParents(JToken oldValue) + { + if (this != root) + { Tome.EmitParentChange(Parent); } } // - private void EmitChanged(JToken key) { - if (onChanged != null) { - onChanged.Invoke(null); + private void EmitChanged(JToken key) + { + if (OnChanged != null) + { + OnChanged.Invoke(null); } } // - public void Assign(JToken newValue) { - lock ((object)this) { - switch (newValue.Type) { + public void Assign(JToken newValue) + { + lock ((object)this) + { + switch (newValue.Type) + { case JTokenType.Array: - TomeArray newTomeArray = new TomeArray((JArray)newValue, root); - this.Replace(newTomeArray); + var newTomeArray = new TomeArray((JArray)newValue, root); + Replace(newTomeArray); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeArray.onChanged; - newTomeArray.onChanged = onChanged; - newTomeArray.onDestroy = onDestroy; - onAdd -= EmitChanged; - onAdd += newTomeArray.onAdd; - newTomeArray.onAdd = onAdd; - onDel -= EmitChanged; - onDel += newTomeArray.onDel; - newTomeArray.onDel = onDel; - - if (newTomeArray.onChanged != null) { - newTomeArray.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeArray.OnChanged; + newTomeArray.OnChanged = OnChanged; + newTomeArray.OnDestroy = OnDestroy; + OnAdd -= EmitChanged; + OnAdd += newTomeArray.OnAdd; + newTomeArray.OnAdd = OnAdd; + OnDel -= EmitChanged; + OnDel += newTomeArray.OnDel; + newTomeArray.OnDel = OnDel; + + if (newTomeArray.OnChanged != null) + { + newTomeArray.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; case JTokenType.Object: - TomeObject newTomeObject = new TomeObject((JObject)newValue, root); - this.Replace(newTomeObject); + var newTomeObject = new TomeObject((JObject)newValue, root); + Replace(newTomeObject); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeObject.onChanged; - newTomeObject.onChanged = onChanged; - newTomeObject.onDestroy = onDestroy; - onAdd -= EmitChanged; - onAdd += newTomeObject.onAdd; - newTomeObject.onAdd = onAdd; - onDel -= EmitChanged; - onDel += newTomeObject.onDel; - newTomeObject.onDel = onDel; - - if (newTomeObject.onChanged != null) { - newTomeObject.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeObject.OnChanged; + newTomeObject.OnChanged = OnChanged; + newTomeObject.OnDestroy = OnDestroy; + OnAdd -= EmitChanged; + OnAdd += newTomeObject.OnAdd; + newTomeObject.OnAdd = OnAdd; + OnDel -= EmitChanged; + OnDel += newTomeObject.OnDel; + newTomeObject.OnDel = OnDel; + + if (newTomeObject.OnChanged != null) + { + newTomeObject.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; default: - TomeValue newTomeValue = new TomeValue((JValue)newValue, root); - this.Replace(newTomeValue); + var newTomeValue = new TomeValue((JValue)newValue, root); + Replace(newTomeValue); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeValue.onChanged; - newTomeValue.onChanged = onChanged; - newTomeValue.onDestroy = onDestroy; - - if (newTomeValue.onChanged != null) { - newTomeValue.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeValue.OnChanged; + newTomeValue.OnChanged = OnChanged; + newTomeValue.OnDestroy = OnDestroy; + + if (newTomeValue.OnChanged != null) + { + newTomeValue.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; @@ -138,89 +165,117 @@ public void Assign(JToken newValue) { } // - public void Destroy() { - lock ((object)this) { - foreach (var property in this) { + public void Destroy() + { + lock ((object)this) + { + foreach (KeyValuePair property in this) + { Tome.Destroy(property.Value); } - if (onDestroy != null) { - onDestroy.Invoke(); + if (OnDestroy != null) + { + OnDestroy.Invoke(); } - onChanged = null; - onDestroy = null; - onAdd = null; - onDel = null; + OnChanged = null; + OnDestroy = null; + OnAdd = null; + OnDel = null; } } // - public void Set(string propertyName, JToken value) { - lock ((object)this) { + public void Set(string propertyName, JToken value) + { + lock ((object)this) + { // Make sure the property exists - if (this[propertyName] == null) { - this.Add(propertyName, Tome.Conjure(value, root)); - if (onAdd != null) { - onAdd.Invoke(propertyName); + if (this[propertyName] == null) + { + Add(propertyName, Tome.Conjure(value, root)); + if (OnAdd != null) + { + OnAdd.Invoke(propertyName); } return; } // Assign the property JToken property = this[propertyName]; - switch (property.Type) { + switch (property.Type) + { case JTokenType.Array: - (property as TomeArray).Assign(value); + ((TomeArray)property).Assign(value); break; case JTokenType.Object: - (property as TomeObject).Assign(value); + ((TomeObject)property).Assign(value); break; default: - if ((property as TomeValue) == null) { - Mage.Instance.logger("Tomes").data(property).error("property is not a tome value: " + propertyName.ToString()); + var tomeValue = property as TomeValue; + if (tomeValue == null) + { + Mage.Instance.Logger("Tomes").Data(property).Error("property is not a tome value: " + propertyName); UnityEngine.Debug.Log(this); } - (property as TomeValue).Assign(value); + else + { + tomeValue.Assign(value); + } break; } } } // - public void Del(string propertyName) { - lock ((object)this) { + public void Del(string propertyName) + { + lock ((object)this) + { JToken property = this[propertyName]; - switch (property.Type) { + switch (property.Type) + { case JTokenType.Array: - (property as TomeArray).Destroy(); + ((TomeArray)property as TomeArray).Destroy(); break; case JTokenType.Object: - (property as TomeObject).Destroy(); + ((TomeObject)property as TomeObject).Destroy(); break; default: - if ((property as TomeValue) == null) { - Mage.Instance.logger("Tomes").data(property).error("property is not a tome value: " + propertyName.ToString()); + var tomeValue = property as TomeValue; + if (tomeValue == null) + { + Mage.Instance.Logger("Tomes").Data(property).Error("property is not a tome value: " + propertyName); UnityEngine.Debug.Log(this); } - (property as TomeValue).Destroy(); + else + { + tomeValue.Destroy(); + } break; } - this.Remove(propertyName); - if (onDel != null) { - onDel.Invoke(propertyName); + Remove(propertyName); + if (OnDel != null) + { + OnDel.Invoke(propertyName); } } } // - public void Move(string fromKey, JToken toParent, JToken toKey) { - lock ((object)this) { - if (toParent.Type == JTokenType.Array) { - (toParent as TomeArray).Set((int)toKey, this[fromKey]); - } else { - (toParent as TomeObject).Set((string)toKey, this[fromKey]); + public void Move(string fromKey, JToken toParent, JToken toKey) + { + lock ((object)this) + { + if (toParent.Type == JTokenType.Array) + { + ((TomeArray)toParent).Set((int)toKey, this[fromKey]); + } + else + { + ((TomeObject)toParent).Set((string)toKey, this[fromKey]); } Del(fromKey); @@ -228,8 +283,10 @@ public void Move(string fromKey, JToken toParent, JToken toKey) { } // - public void Rename(string wasKey, string isKey) { - lock ((object)this) { + public void Rename(string wasKey, string isKey) + { + lock ((object)this) + { JToken wasValue = this[wasKey]; Del(wasKey); Set(isKey, wasValue); @@ -237,29 +294,38 @@ public void Rename(string wasKey, string isKey) { } // - public void Swap(string firstKey, JToken secondParent, JToken secondKey) { - lock ((object)this) { + public void Swap(string firstKey, JToken secondParent, JToken secondKey) + { + lock ((object)this) + { JToken secondValue; - if (secondParent.Type == JTokenType.Array) { + if (secondParent.Type == JTokenType.Array) + { secondValue = secondParent[(int)secondKey]; secondParent[(int)secondKey].Replace(this[firstKey]); - } else { + } + else + { secondValue = secondParent[(string)secondKey]; secondParent[(string)secondKey].Replace(this[firstKey]); } this[firstKey].Replace(secondValue); - if (onChanged != null) { - onChanged.Invoke(null); + if (OnChanged != null) + { + OnChanged.Invoke(null); } } } // - public void ApplyOperation(string op, JToken val, JToken root) { - lock ((object)this) { - switch (op) { + public void ApplyOperation(string op, JToken val, JToken root) + { + lock ((object)this) + { + switch (op) + { case "assign": Assign(val); break; @@ -273,22 +339,23 @@ public void ApplyOperation(string op, JToken val, JToken root) { break; case "move": - string fromKey = (string)val["key"]; + var fromKey = (string)val["key"]; JToken toParent = Tome.PathValue(root, val["newParent"] as JArray); JToken toKey = (val["newKey"] != null) ? val["newKey"] : new JValue(fromKey); Move(fromKey, toParent, toKey); break; case "rename": - foreach (var property in val as JObject) { + foreach (KeyValuePair property in (JObject)val) + { string wasKey = property.Key; - string isKey = (string)property.Value; + var isKey = (string)property.Value; Rename(wasKey, isKey); } break; case "swap": - string firstKey = (string)val["key"]; + var firstKey = (string)val["key"]; JToken secondParent = Tome.PathValue(root, val["newParent"] as JArray); JToken secondKey = (val["newKey"] != null) ? val["newKey"] : new JValue(firstKey); Swap(firstKey, secondParent, secondKey); diff --git a/Tomes/TomeValue.cs b/Tomes/TomeValue.cs index 92c7fdb..89be577 100644 --- a/Tomes/TomeValue.cs +++ b/Tomes/TomeValue.cs @@ -2,104 +2,125 @@ using Newtonsoft.Json.Linq; - -namespace Wizcorp.MageSDK.Tomes { - public class TomeValue : JValue { +namespace Wizcorp.MageSDK.Tomes +{ + public class TomeValue : JValue + { // - public Tome.OnChanged onChanged; - public Tome.OnDestroy onDestroy; + public Tome.OnChanged OnChanged; + public Tome.OnDestroy OnDestroy; // private JToken root; - // - public TomeValue(JValue value, JToken _root) : base(value) { + public TomeValue(JValue value, JToken root) : base(value) + { // - root = _root; - if (root == null) { - root = this; + this.root = root; + if (this.root == null) + { + this.root = this; } // - onChanged += EmitToParents; + OnChanged += EmitToParents; } // - private void EmitToParents(JToken oldValue) { - if (this != root) { + private void EmitToParents(JToken oldValue) + { + if (!Equals(this, root)) + { Tome.EmitParentChange(Parent); } } - // - public void Assign(JToken newValue) { - lock ((object)this) { - switch (newValue.Type) { + public void Assign(JToken newValue) + { + lock ((object)this) + { + switch (newValue.Type) + { case JTokenType.Array: - TomeArray newTomeArray = new TomeArray((JArray)newValue, root); - this.Replace(newTomeArray); + var newTomeArray = new TomeArray((JArray)newValue, root); + Replace(newTomeArray); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeArray.onChanged; - newTomeArray.onChanged = onChanged; - newTomeArray.onDestroy = onDestroy; - - if (newTomeArray.onChanged != null) { - newTomeArray.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeArray.OnChanged; + newTomeArray.OnChanged = OnChanged; + newTomeArray.OnDestroy = OnDestroy; + + if (newTomeArray.OnChanged != null) + { + newTomeArray.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; case JTokenType.Object: - TomeObject newTomeObject = new TomeObject((JObject)newValue, root); - this.Replace(newTomeObject); + var newTomeObject = new TomeObject((JObject)newValue, root); + Replace(newTomeObject); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeObject.onChanged; - newTomeObject.onChanged = onChanged; - newTomeObject.onDestroy = onDestroy; - - if (newTomeObject.onChanged != null) { - newTomeObject.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeObject.OnChanged; + newTomeObject.OnChanged = OnChanged; + newTomeObject.OnDestroy = OnDestroy; + + if (newTomeObject.OnChanged != null) + { + newTomeObject.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; default: - TomeValue newTomeValue = new TomeValue((JValue)newValue, root); - this.Replace(newTomeValue); + var newTomeValue = new TomeValue((JValue)newValue, root); + Replace(newTomeValue); - if (this.Parent == null) { - // If replace was successfuly move over event handlers and call new onChanged handler + if (Parent == null) + { + // If replace was successfuly move over event handlers and call new OnChanged handler // The instance in which replace would not be successful, is when the old and new values are the same - onChanged -= EmitToParents; - onChanged += newTomeValue.onChanged; - newTomeValue.onChanged = onChanged; - newTomeValue.onDestroy = onDestroy; - - if (newTomeValue.onChanged != null) { - newTomeValue.onChanged.Invoke(null); + OnChanged -= EmitToParents; + OnChanged += newTomeValue.OnChanged; + newTomeValue.OnChanged = OnChanged; + newTomeValue.OnDestroy = OnDestroy; + + if (newTomeValue.OnChanged != null) + { + newTomeValue.OnChanged.Invoke(null); } - } else { - // Otherwise call original onChanged handler - if (onChanged != null) { - onChanged.Invoke(null); + } + else + { + // Otherwise call original OnChanged handler + if (OnChanged != null) + { + OnChanged.Invoke(null); } } break; @@ -108,22 +129,27 @@ public void Assign(JToken newValue) { } // - public void Destroy() { - lock ((object)this) { - if (onDestroy != null) { - onDestroy.Invoke(); + public void Destroy() + { + lock ((object)this) + { + if (OnDestroy != null) + { + OnDestroy.Invoke(); } - onChanged = null; - onDestroy = null; + OnChanged = null; + OnDestroy = null; } } - // - public void ApplyOperation(string op, JToken val) { - lock ((object)this) { - switch (op) { + public void ApplyOperation(string op, JToken val) + { + lock ((object)this) + { + switch (op) + { case "assign": Assign(val); break; diff --git a/Unity/EditorPlayModeState.cs b/Unity/EditorPlayModeState.cs new file mode 100644 index 0000000..253f79d --- /dev/null +++ b/Unity/EditorPlayModeState.cs @@ -0,0 +1,9 @@ +namespace Wizcorp.MageSDK.Unity +{ + public enum EditorPlayModeState + { + Stopped, + Playing, + Paused + } +} diff --git a/Unity/UnityApplicationState.cs b/Unity/UnityApplicationState.cs index 3019d15..0af891d 100644 --- a/Unity/UnityApplicationState.cs +++ b/Unity/UnityApplicationState.cs @@ -1,16 +1,22 @@ -using UnityEngine; +using UnityEngine; using System.Collections; using Wizcorp.MageSDK.Utils; -public class UnityApplicationState : MonoSingleton { - public delegate void OnAppStateChanged(bool pauseStatus); - public OnAppStateChanged onAppStateChanged; +namespace Wizcorp.MageSDK.Unity +{ + public class UnityApplicationState : MonoSingleton + { + public delegate void AppStateChanged(bool pauseStatus); + public AppStateChanged OnAppStateChanged; - // What should happen when the application is put into the background - void OnApplicationPause(bool pauseStatus) { - if (onAppStateChanged != null) { - onAppStateChanged.Invoke(pauseStatus); + // What should happen when the application is put into the background + void OnApplicationPause(bool pauseStatus) + { + if (OnAppStateChanged != null) + { + OnAppStateChanged.Invoke(pauseStatus); + } } } } diff --git a/Unity/UnityEditorPlayMode.cs b/Unity/UnityEditorPlayMode.cs index 793b7d0..9454929 100644 --- a/Unity/UnityEditorPlayMode.cs +++ b/Unity/UnityEditorPlayMode.cs @@ -2,60 +2,73 @@ using UnityEditor; -namespace Wizcorp.MageSDK.Editor { - public enum EditorPlayModeState { - Stopped, - Playing, - Paused - } - +namespace Wizcorp.MageSDK.Unity +{ [InitializeOnLoad] - public class UnityEditorPlayMode { + public static class UnityEditorPlayMode + { private static EditorPlayModeState currentState = EditorPlayModeState.Stopped; - public delegate void OnEditorModeChanged(EditorPlayModeState newState); - public static OnEditorModeChanged onEditorModeChanged; + public delegate void EditorModeChanged(EditorPlayModeState newState); + public static EditorModeChanged OnEditorModeChanged; - static UnityEditorPlayMode() { + static UnityEditorPlayMode() + { EditorApplication.playmodeStateChanged += OnUnityPlayModeChanged; - if (EditorApplication.isPaused) { + if (EditorApplication.isPaused) + { currentState = EditorPlayModeState.Paused; } } - private static void OnUnityPlayModeChanged() { - EditorPlayModeState newState = EditorPlayModeState.Stopped; - switch (currentState) { + private static void OnUnityPlayModeChanged() + { + var newState = EditorPlayModeState.Stopped; + switch (currentState) + { case EditorPlayModeState.Stopped: - if (EditorApplication.isPlayingOrWillChangePlaymode) { + if (EditorApplication.isPlayingOrWillChangePlaymode) + { newState = EditorPlayModeState.Playing; - } else { + } + else + { newState = EditorPlayModeState.Paused; } break; case EditorPlayModeState.Playing: - if (EditorApplication.isPaused) { + if (EditorApplication.isPaused) + { newState = EditorPlayModeState.Paused; - } else if (EditorApplication.isPlaying) { + } + else if (EditorApplication.isPlaying) + { newState = EditorPlayModeState.Playing; - } else { + } + else + { newState = EditorPlayModeState.Stopped; } break; case EditorPlayModeState.Paused: - if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPaused) { + if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPaused) + { newState = EditorPlayModeState.Playing; - } else if (EditorApplication.isPlayingOrWillChangePlaymode && EditorApplication.isPaused) { + } + else if (EditorApplication.isPlayingOrWillChangePlaymode && EditorApplication.isPaused) + { newState = EditorPlayModeState.Paused; } break; } - if (onEditorModeChanged != null) { - onEditorModeChanged.Invoke(newState); + if (OnEditorModeChanged != null) + { + OnEditorModeChanged.Invoke(newState); } currentState = newState; } } } + #endif From a6f09c8c781436743f28dcba2e110e03dac4f969 Mon Sep 17 00:00:00 2001 From: Almir Kadric Date: Fri, 21 Oct 2016 17:00:21 +0900 Subject: [PATCH 2/6] added missing updates from coj branch --- AssemblyInfo.cs | 6 ++++++ Newtonsoft.Json.dll | Bin 494080 -> 356352 bytes Newtonsoft.Json.dll.mdb | Bin 0 -> 143997 bytes 3 files changed, 6 insertions(+) create mode 100644 AssemblyInfo.cs create mode 100644 Newtonsoft.Json.dll.mdb diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs new file mode 100644 index 0000000..dd86131 --- /dev/null +++ b/AssemblyInfo.cs @@ -0,0 +1,6 @@ +using System.Runtime.InteropServices; + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/Newtonsoft.Json.dll b/Newtonsoft.Json.dll index aa190de7303c70a73a7227181a38f2533a5d33e5..664cd621d8305a0ba0d6663cea32169de7125f14 100755 GIT binary patch literal 356352 zcmb@v37i~NwLe}{RbAa(JzLMxJ$p|AlT><}$xH&13`+Md+x33>RAv!|NnfZ`rdo) zIp>~x?z#J|TW4%}wP6{CVdHuFX~XykT>h<--)H{Whv??q$C`~tl8-O>NWsyDor5QxdG6qK{*~LxO-=5Rn)O*54CC|$ z%UJsFeHR3&Jz*>zOf`%c#`c(DBoy@Km%u*=|GjVxqgDK-lA8d^FMm%U9&r9y#=4gh zmH#zY2MNO8D)2p%9`L;~WI}-cdo*S=!u$6Z#f-iH_H5k2P;|jgAbd)MuDom8jk^#& zX`9X$^Qz?z&_Hr&xl*lM0f5K`84U-4tKdfd)}gq{m2KDhK%}e&WENgK=i#l7kcsyy z>J@*K%`{@hRhOH_or9LqAkcsPXTY4!p)~SKO>0Ix1Ex0ssq<@<8-Nk-A>PR&{wl+8 z;Z6?*gyI2UNdOQJ080aacmOye0Eh5Ykve<7pbdMss~Y z^E}cJfoi0>puHw)uV;1zp#$bVahI8yZV#$(^1UN5<3!{eCY?5I@2jTaxVd%S!x9dezbZ})J)Y@~niZ7k_5KZjY)NCD-&`NY}LTcGp;Ivt4v%i_BIf3GVq8%iD)& zOS|4p2;?s}>k@wvU@GyO%|&8rN$ccR=;W7Jxw8LaFz6i1Sh)?_o3e7-l(!7ItV)_0 zeF>A^ZU*>e)6AQZn3}R*O2k_5W(GHfMe#BOz1391GBdZ-TT376qh-L5*^H%;Hx{8% z?8|}ewlt`~D-cMAwY~qCKXSwY?>%E=uOlLDD$u5=>G` z&Gc^tn)fg(meV!0VF@zD%8&r!QQBRv-A&rvqTTJS2M_GlcnZ%)@r*x-A9L5Mp*>ZD%m+|H4IY{zCvQG* zC;iKm{|@?(R(=#kgNKX}2l6#|sF3udyc#?-I`rR8KQc`}G~VDrL-a$D4PHt4p{)k5 zto*mpKdk((qJLER`{_sVl6H{(ar(8sA3%4};2o)Aq3s55jrez=y=(A}RdCvdhqlPc zS77VPv~)?m9c5WX%I=iEq@(C z(YD=@s+3pld!LaVQ*E#4=)5ok+6QfkZz-xA(k!s|Ht8-!A0vQ^&4V6#1P>;GinkdI z9$+|M4<{1^kLrCfT_V$xYA?!&c}^kEX63jBl<&WzP_-%@zl^Mv;!f5t!DCio#cuUx zcvDW?@+aV#)2XREmyFbSkZ0uY0_K^0no6rNQdV;~9tDnZ|Kq?fcEtUM;r5nOm5mUq z`V<0tqFUDaZ8w&!QE73E@f_rZf0ZADW*-u@E5D`>HO#L3g+8`4l?D?&)FQjmNgwKv zU0F`wFntsBjlh?8vn-AS$TbI3=zlmam`2r710wNM)bPP7r79sGrfx>CkHe_q za!8J{ybKPxy+(2K&?31U(|NC>2i3;*ULX42K;OxPp&@fxO}l!PBA*@$5*H7oLC>kA z5zqO0Fq8GJW3pM#*L14`H1P!Eu_l)LG};*%!`+2c^%(Ar6o6y6H^DPQgxYYERl>>N zf;^&$u#p3F>(0zN`a5UPP1t6~3b&Fhc^sc?3&D1E}>%YLEIi7lP8)!qh&r%)EDC%{eTHsrsA{c=WPGY zpzbU$u_{-Cmwzup%dEI|D}D&eTmD-Rmsy!)=YC%lEpO$vYKW50f2&02E>h5Z+3YIE z%+l?Dj#6fEmFd47G3|CC-DZ35pf}bQi+dPrIRHEaKZ9=nN)4ab%^MQco5z-JLq=CVsuAQi9uC38r7trh^4G}_`cA-HFEwX*E zM)RS7=EI~RLP!IpA|2E^p+Wr*@^gJa^E}cJA*5*#nv*rn)is(O0nIg}Awo#gAv9=l zC7qAdXfQNVdc)w#ogqR<(H_>Ggibrfxm6_7zM$KnYT@oQoTj}LA zO|z(8h!D~!yNM# zMr>m%qDn|1Wlqy8?V@YSSin0%+8T53xrmr%XHqhqypx?&vI5=6l1C)onf*9~LW(Sk z-g1}nsbbu0`bY+Ub4AA$N*8~-Gj?LpyEe)MccS6H^iGa?GgtUO)` z=bC}2VWDTIL~D|_g(5!%`3mg;xs>_g&Tfn=qWM~(@}+WxB9>e!18z_`k3;3mjUxty zHISP1X!+j(`N21BdWVoJtgqyq{;3TKKpXXgCeEPsp;Zz$@E4}q%)_13N+NIi?*;X4 z_H3novtI?ph`dLU6Y26Y-q(SnqGUE$WeciFWty2X;~q*Ev$@K7mhM)a{YN6{h~6Ou z^?n819>{HZp9Ys=hnY)ts1#`Glq#OL`c3Z<@I!fjhDe=ezv^-oqN4@KB{97h*(&b~ zlGVMrl(eJ=gE4v|ddek7pscjR+E(ata;b96$u*BPqX7_INQUx`cO+_c@wp0CyhORX zQQaDfJsOdL4kf7nS%{e`6gAorL~GY*49N0Cs?exFYE8_{CF4r`IP?~?|B2pKq0#S) z(lQO-pNC0C7C)ZS7Vpc8*n5!0RZpoOrbSMe*GLm+>CNSOu zb+X(&{#Nm&%I88&{e4L2;1ZC@RC4S{#rFY1+MPB>sM}+pO2-sgIu;bwN)&D0 zq@~jI!d%WXJ=)z)h};kTRlfisutdjNlZqEp@&0mq964K7INGdyn2HkH(e|#Y!WTi} ze+fT@FFO90;Wk2?gpvkzsPd0Mzwx=MRW|=1(jJJE-NJQsib};pH}DrOV67OFTA>uP z8@gv*9Z*3f;A4Y(T7?8uVGF3M3ZmA8P^GA@vtx@|9QE~FNRflg3)fR6ku~@W z${f_ye@9ZNs{>9%6h{jXsjKe{5}sFA?+3TRXVeqYm6;p$gnmLE`U{)crVT+)L7S!& zgKFWX%$ytFe`lzjxajWkWok#;93uGFl@{d5)1#RjgqzpStsk&`J;G6OYU2l@I}t%0 zB_7Dxn-1mGmxKuLC?-Hn+zf<4-@md zO#h^4WDz?eHKdONsmK2wv9Qvo1_!m+?}RKGV6{$|s|7}+T%%>ltIpq9db9jgcrnhYnuM~~>&L7-x*3hX@& zfuW7r$<0#kG0ADO)Ul6(2Gb-Drsg>1rDo-4EVU|%)RJ;?_G2z%suigxfwM;okkA5P zl*IIfuPw6y#g|gLj%*`gkSxOw7j7G#!l2nB!spFC?dDwVQOwNBnMo~$PG45iB>nBC z_ZILjCiH|7T5MFrKeuvCwY63oDLG8d$>zKA-LSw8w=QRq8N^yMODl#7zmJS#r$Oe= z{W4j$E`e%&z#Yu#`z0l$ESA(EmXtqVSF}c5zy1K+Jy^|F3;U>kKO}JmDiS+Kzs3Da zZRc(Qo{s~8i*U-+F^l*OHUfT$RaM$A#&;TD(303TM~~{%uzSltmF1U#!Nu{QWZWZT7<-17bt#k&i`y52@}FQJLJ2N?>k z6Ce8#a2KUR2`)|tJ)VS(94udzT4iOZay~4rdI&UJ9(o>?4(0oFYdCL;;z%5Dt|Jat z&cp)%CKn1I9sn*=T)0ryGk1YY;(&8`4QJjWn8X1GZQP;@ZW0HaD{DCO7ThEbINNGC z^U{(y;K0g)wC3SR9B^QO0nWSyK#2p+_8QJSc_a=vFx7z1ytE_^I6G=M^Y}>I4s-e% z;BajT`E+I&P#_lMwIs)8l`M;W8?*Ttfgt93#<2LrBle`$Zwq3F6-0BX=|`{(z2^P| zyt3y0V|ZqW5U#}*g$6CL(4ejbH2)RQpgy`YL=zs0 zWwT?7E<_LL%0p}JsSdME({i-IO+qIg@`d3-F^;Yh>qd@hYa6)UX^b*{5Y@$Xc=7?K zvd})e-b%7zKNj*BU5JNm{1WYQhI;qU0fJ|vT`rX~ZlTZg+nJPtJN}=*)&Dbouzc%k zsQ(v)N55_DeHU`XJz%%kh?5HEgU-hg&$0Htn-TvTL`*WGO(NdPi2n;BwlKn!hzA() z*C1juBW#Iy2P07BRT`%-!jXu#GvaSS1h(-VA7^=x_=Al2U=VRSBbp`RZH#z0h}gsk zS0e6b#QTGYvl!7R5$|Ng--Cz?8PO^c4>95&LBzF;$V$XLjDR(WxYG=Yy;=SaM2ni} zp<1ELivt)vekXn`|4PEpb&JP83{E~2iHPk1GCe+o0_@TNMh}qzyDEUu<3puT$!jSU z8$wDj&5*Qy*521Kf~}oIFeFW!wfFUmV3Q^h3`sj??R^6y*ltM#L(*7T)AzxPVTLvR z7Q&<{P(W!9ti5-UkPVR#G9;~!wfBvTV5=q(3`tXF?R^s?*bGSoL(=wG(|5xwFnXji zS=09t#^m2j*dF}APoQch)?#ylXG?64$3Wyngnu-Bs7vi53FD=3$5q`KPU+&1|#U?6#P9EC@{>w&xU^mFt&n!|54jO|+_Ciy2Nk4zzT`O*=y+bD3rP zJrck|xzP2b9seL89sV!~aZD(lNT%&{%sWm?*WvL147U9Ou_bu1Y1NMF2!=Y9gHfC9 zA47unk)*M2eqR2+XTbD};P3bS3)x^hltDYQ3VJoCU%&!dp6$5*MxDdsDTd}tUL$QbOM60qhziC3T7bZma(c+Lj zq-T^lJq=#Pb1fd0aN03mqQ&E=hAo>=u+fj|G};0B2>bxiky%!;w;2ruDR06!fxC*N z_TQtDaMb>dIX%lHaApOqAcSX)_Rze$#cVUqXA#IEBbX;QoPymP?>O7qy%e(&OsbAh zL$}>q5Nt;^z^N11{7=y3O@Exd;a5P1%10YPI>u_)h+T}sj6VooI8-ZbPZN*VhGo~H ziwjU&ib!r|RG$xuARcQq!tY$~@rE`ODT%--CJIOW}DOtAepGAg13!#;9t?3ga8eSUL(YP6=az z+8f&%y+4GE8wEu%wiTZDN5xne5Yul2bqDsTRCBdFXs+4-R?St1;4M3s3>W(cqB%jSyPQTv3lTdMLSS5 z<2-`lLS27B>5M+nq3A559dxJ%;d(3k?i=fg~g2q8^cXwV}G z&BHaC_XafYBMlKknl_=~V3o4Hzee+cfaVd>5P_2{H0Ns8B_7eY(hK@0$cye&`24lT z2P1Bk#~AZSgfMM1aiBpvFEoCQ=K3IQ6uUb^gpdXu6==}S2+jZ2Xq+IOIMX3QNQ0IF zG;h^3|5u~I*j~w&Bn=Tl8Z-i+L5C#i{Jlnl(Y>Nck%kD=3zV(&A|3#sas?327SrPx zTsG##Cxh_7?h4T3aY(P)o8;Wfn!(zaZ93C*8+eS-A3MfmJf_MNx z;VFQ406-BcfOr5vQ7V9V#HI(3_VJR}hY(2{_y_aq$V@YjU{jD^%y--wB5|J1@iKeZt0l#a=j|llKFT4fL;Z6^mHL@|W?*PF#ngZ7~t1UEZ zzFvX%sXR1m4v(gD$`l?=|1|Jn3|}A_jO#JFTZo0JO$|%HcbI#>glO+IJfxGsDJ?<= z`3_w5wOkuvB=!N!X)?=B3Qw#eeV$;k*O+lTGPjQTGp9eNkm#7+tq>6_?Qf-%mE9a0 zdr%2bq4$yZZ1!pY{cwYaapSON!`%C2u<`DL6v1(rRAEa5nmZClTmkDq~fw_S~{T?%gM zTIbp$?s^0NK6?C?)i}`kS&FaXQt`~nZgZLx3Znd(xVN9>YfjT5G_F_&*5Jep;xmei zqNG1_H|PEt?^QHm$U>R+pw!okOkV^>ky}HOx{U*iO3Lii@#wP*s|dLiq)SU^Pi7}Q ztZm^ekyvlS>p`L7XeQAz$xMK+Bo!0|@_K0p$r<8}zk?!vvoq9j6g6{qJik*(Vj;hz9!+wa302#XmmN6A!nlC%$D*IF zl@W_LAeq7_F_SWFCq5-*+n6XO;)zMTlsNii+!;ohX2t%{a`K%doVUD>rXyRA*g0(i zIELqy+HHi(hp+(NJ}2Cd@c7O6F}-(FRP5U-=k0Kc_h<8FCgZ)D{;k+Wd@nr9wDgf( z#fVWK$PJGr(O7)|m>{lf=VY?VRyT^Y|7C2MYdf^H4a&+NLjn(NxwHS16s?AN6nMW8 zydOY6){E|{*Lxj9n0YhQEg^Mm5_zJ|H=A-wOX~`6nTWPh@lab&qE1jdbOV174m1~p ze*&EGpW&x2H;swh^3^9Ka!sp;62;w#Tykmy37!YM?RZ|IA1o9b<1fTdA~!gJ(HY#O zj$L~eNEJK}DgKwD;vvsF*zE}HnB0C!Gc%!TlD*&oM} z7F6^WsA0{vr=Nb>%;+<$IMA5r@?HtJK5>UGxwpwFP6X#JFm!y@hcd%sl5_f~tn4hS zGoM*^{HKQ@fT{=R>ZJMV(io2-HJI0%ArBU=vuJP^UKF(jPn<5g+&i_a5N0RpE0-#2>&GbH}k{f>gJ!?u^4W zQ56}O=z}}{lmvE8Tp{kR2~3lW@$chD+iG@>tzxg8wrb(EW-0}IxqoEr!PAOo1D?W- z%98czNbT%K8`gmCU7eU@Kn4W$hXgSSbM{Lsq43oCx_~H0BL379VI=45KZ;FDWl3Z3 zex21_<|vQ09hi7LG{N^H2fDV+fStM@Ku%=K0LVKCj*0x@EaJIc<+xlwP>9L>15IYq z`w*CxI*{gPq}O4}2Xuo8PN^=L6~mvFm4l`@h$kN z({QBTeF_9&z54-7`0IFR-+VrgC#-kZATWyuqiJ#J51xf!Sfem*0xqBb({2!cCU^V= z4Uu|x7?iAcuYo&$iNx$IpAK7^crhVo0HP~hPqfmtVI6)5*3CogICL*P#k>JA=Kw*w z9VN(kHCvZr;<0}oMt2jDgT)DTuo$8oZfHuD>P#C8{ur)3lX1IAVWliwA5qpF$Jx@% zOUH5Yyf$5R6AN`5?Lo&8%}QXLx(E4l&CY*4@0I}fDo{8RJnJetNo>q&s&2bOS%_KI#v`SbI0dv4}da4m7Ry;%nY6 z2Bya~=xz{Tl%V~rK2wox|eL(wR*}&SpDT=3K!r_C{7n6vtN04NM6%IS1>OUQ+Q|p zDs~79M1F>mV{>|oaKK|l>PtBMc~#AdU-Bo6i< z^=upIqs%@v`j#&8D6>b6%tb#(nf)px3PIU$th5y_|IBPw%_)wHwz%2J1G(Ke!|Qz% z{T&o6U2K;gMb;rs1>K*TX{m9hIXOJ7?~Kem>fn%A7?tECughoU`OV zql8f6jBMf_xYeg~}mdUM(&0vm?yg0@r#+RqE zj*B`lePQ>H_b=(-NFvPN&Ukln8ZJ3 zI&rf=mQT!zdtv$5g3bhP9vJ&Deq7A5Bo_~vj?!-B9gB6xdjgbM$Y2+& zOPl+Q%D5`L1Gx*wu8jhe{ZFNx_JlT>!1(LaD)njpL86Ild%O@=0whfD6%fo!Clcsf z@26LpN`QdfxV2ZYZ4|IuCNJumOUOv1ihI6ibg@CuW$gF4G>>pyBF0kC9Cr|Ku!{3d1VE++-q_gEbsB0|=;L2^Vr4 z$Uo&EC&!F)$Wqs7WOS#o_8L}9{c-{paFt|wmN~wOk#!(5*Cd0(xqVD9$ej;w3Gl-e zx_X8(xSW^rH#s`cqvJ2pFZFo*6Yx4R$-@iAb$rI}BUUBXtXmXkZV9m*EaOK|#6smD zMKBf?!SjK3EuLHSb1B^Mm*NLSP`(aYE}ufh77DxSw3-UK;(O<2sBl}Lxq7jouTU>K zyO&YvD!b>;)BpI104<^cPY54Ed&l-7X5e6(ak|v)h@JDsLca68e2jwucImpX`R26j z{={YXr*MMlco=Wv)d#E(s~GQH2y?jd_CU+g2I#PqW7PsSSVD5QD10fGEDplMB`iqaj^E+ET2kw;UFmTc8)+J%-^CXBUN|;<;@MypMqux}>zV=y`U%L8{pWll!Dj?i2ON z;WXoCLIdMa?o{&sH}b~?8Z!BdHZR`C6nT9rYBe2r^EqHsJMcZxc>5*w{DHhRL0IZA6g>pAL>cMCF`S9X08 zN}hjn5VMw=5$2+5Jdkt8n&%)Yi4{lI6Lt!l(5~_ou)>}?YHXijYsM{4U~8saDjZYS z1T<+IE1jHm3+w9>DU2eLYo0I-QC49I_H4=tRlSRCS?&o&TI+(D#bMDGTR4^%zf|%W zGhPm(K9lWz<+@fhFkI$Zb1e-$Y$?eA^SPSUVA@tXwob@sJGGl^R68YU&yiuAibzWP zi1*{_#k&jBzp+*YOQGqLtX+h;;aE!mRM|W=sY*W^fb03>lQ|ECu9C-F7L_kkrYfch z$$8z4%9s<6HlxqB-|*OPguLriv_LwMf>0fW*{ymHj1kAufzo(i@DVXtnZ;h9^sQ0V zhZAe>Z73<|=o@ILphlJsP9!jm=v2hODlw`;mycgOavNT*Rs0vA+z{N$ghQO!bsUi5=rNkwktw+-r*Zr@um_xK)QLxyxHxI8 z+yuq+%6r%)H|-2~xaiX@Bykl@t9TWUAHE$tFn_JQjA~>#W9G@d*mRu7mC<7^D4vG$ zUu(xA8fzt1&pHk( zp^SdVLm%emMykDVygvNwAH-O`aU4f}sG5uCv1@nJZoO*U0k2=F#)WF=^#(#lho0A- z!ZfZeP>!pVlZq-QlBdC^kgli^M|!^wZ5G{hqY??Tr5c}kVnviO&@_HFx^k<39XEoJ z%PfwZz=yw6)=kM}C(o3>rgT$%{+h!4H3j+0F@LY3qL9C4vvPNszb2Kx=Ed^&Af!vV_W1WMleFpfbbEHJCEXTE_z_U2+r_Xqv}>D~ zCvBuG=f$;msO#vmV@IbuBG%FwSWBn2mNO&PlJ1DG1lcdbLdXP#kkN(E70rB4H7T>LeZN)3I>;9_0d9NuVZ|KH5vyrumIt^8k=pW|?h)Qz*Dhx#ta%&Jo) zB`kY9Ox@^?EYkVq@?&_9yMPWb3LM7SFqgBOzl9o&#{ZM)=OLq?5BOKz?XS#q3(?x<{Qn$9kNugdR zRfjdAqUDCyolS&*XLd@s)-%aF#g-65r>c7N@ea;L=f|qy-d{Lst`kQNYwWOaW>Jq_ zx#m^H7K$r#FB!*J@;+&XldZG)A3o^J(m#6r9e6QzEdgmIWYb7dJ^gWU-E zEv)XWu!6bLReR=vz=jK`6g!NX2wp00D&>f zA-kF^=+H4X&X@7Ufnkxrlp{SQSgD6fj5lsFvWU=#O!=ve_!J{zJSxk8A-*aecFhcoE<6MJE}Am>geJWuF;r& z9AKEXIgQTLuHyb+XNDjZ!E?!Is1`bxEMP=`jnNldnc-CB4b;VL=#zQBguoGhkny+i za|EsY96_q`-%%{an%;LIEt5i1Y3DD;+duT+a!_lA9^7M%?Pxh8jRB21>n|RZw`r^k z^@()}Ib^**3o-80VlY?uZo-Ttl${}+nHyAmyF^HxJk9|V*T)_W-i+Zq(&SlJ`7^y9 z@HVIa0|+cD=3Rx<;na>9#+csItP?0JGGbW?!z0OX3zrP85+(%ZrsX>&0C#mo!CMvh zF|)fn0W`)q$3mbE_WkycPHn8!QYuIoHc0s7qH7Wa54SFl;1&%g7H{ z%S0tbrIH{xsDgOCi?J$`dEEBkT?8>;3uta}ExM!HU<7`^Y5{Pg2D9BoK){=DOO6O1 zVRZ`*n+vK{YOZI3Z+=KozlKGILZqr-%G6V!Ju&XRG-z*-t;%}rvWr;O4i88E zqJW(Wa9oHnFZ_2B++q%B4yK30fH+_OC4e*D2%5G5m7Sm9LUe4Cx;Xgkuc9^r62MD< zM+vi0!o_%x)$=Yd!h3ig?+D?==(@Dv@&OTqME8IzJ)`KBBOQbUetsadCExeZS%cki zkNrz<&!PQcwm@~_PBolsbmShp)&|q#n~xqEcei+@Dx(Z)J4-=!+f_;3ts!_%@o*;w z9KCUg(Fmir}XAI#gHuBvrh4lZw*0AxvnAX(#B=!(E4uCBvJL-U370hYW`iJ*& z2#R72@A3E z&Bc4F%J+jf+?Zu~J3=De5LT3dV)UXq*xV87yb9|8I%M`M?2k8doSoS*+J$lUju9N& zrkXH`w8Ekx$yGxZ^0-jB|4roN#qwZE&@OH31qc;0anV)EcpNiUz$)g zE1sPkN=-4zoV(-V$*N#hbY+ zC2s#+jR%j!Fj#H{_R?s1ee9j%9^s3VKIq&B7>SiXUdG|3?UCoCZQOsI0#|d9hjGCZ z;1rTh!XF2R0**b1C+U~Ly>!N6FNzXmA5cgseM9d`xac8MEbgq`wl;MUWT zv7t=Pz4cMZ08jFsp)7y8_|wgw9{%+5r;k7V{2Aa+E{Wg!fF2Ncffi4M6ro-`eR%ru zM9I2BvL2A(iI5@Gi>D7yKb|OAcSzO;GCUD7gnIGx;pxW{CF=>vvOxyn>BjTVvez3> zW`W#=OmugHh!XZ9seUAdCz@2>ze>;_5`c3gJK(=a8vDfj{(-i5->+D)FzSAaE-#%D z568VjC|{Y6PyZTm`a1yh>hAz}U2I%!dEuP)&ANFxTo^3ISN{z}yeZ@Y(2S=MkE5Ri zTt1BBW8pZ9Fbt zR04uK?F@W&w&`bCQ0Q^xKDJ$;ykh^H%93ZL_d0wx}O zqJXLCRG`-1BBZ|^G4IMZi385>o&iVVfb;tr&b%w=Bn~)#AkNM5or-x^$1%?In^0nT znPmO3#%~_3#DU-c5Qioqp7rMRp8%-;-U1$`) zSE+FmVDM=J@>wYIQ^*;PP>I0mn+D;>2}q&>n0*wP%Vog?4{FPL+Z0Go?f~ivKzd>a zP`3hc{Ld*B)$K2#=O|2MSi!u4;)1a|cGfWyh+MgZ*Zwe}^aw`2S^o~}cG=p{1_*ZF zdqn7U zal@7!!)2-~6c0<@Lk1fIpY_BIM-Kz1du)jnxovqZQt$DOLC&xoXnA=M7LHJuz0znl z$1W|l!MI7Q2t`7?X0FoI5-mjr*wr*-rw-e(OK??+x`6g()^W>tHDs8Syr7-Nx30{} zNk~|)ODGoo<$kkrFZCj6sSBMWs~0M9_3_5MjmlU-U8Pb;26r|Bsg4EY8P0mu`a}KpVfLwOLjcQR2p4Vsd!^yX*@B7u`=7pqVFY_r;y#dCUNTCQQ7TK}L=ty<*wU@Gy0f-x_*%e_*@-Q%{{5>*LeWo0*`9@8GZF!$#;aUJflyX zoAybhUKgajVQ%!vj6NZVe$L!zoN9CZ^+7Zauhpw%Bct)LN~N{a=0=~+=#zrzGv-Eb zVzhLKl>E%O(PuGQ8Yo7eJvaIsMoZVk=yT^rZ)UV~I*dMVZuI$#K9!pawpIJgFh0&nUa(ZIByb=ks{>d@&H9%CQoH}0RbfCn6?OkPm*u4%TgEwNFclj)X?>9FOM`JlEpckLL||V6z6cL}UbnQLcgW^9Ht64A_7H<;k1%vv7G# z@m+Wx$MbzWSOPT?XyDO78mK|W1$eH+^HMx_;Q0WaNAdg^&u{S@iw=QL3!XkaEASkJ zXM7w#7$m%m{ks^6X&0MRxOxE;Tu5@}at>!M{<+L2knbe28k7h!!}87|kg+6)d0TJX zKT9LuL1Zx?#hKyiq~eS_>^1{A;p2^N;rt3Bi=``MhN~DYQViTncNUP7K2C)Q@-0Lb zyI05zS8;a2#U+!t66b6nr)~cnjg9532Gu$!Y=-5FR=~#Fp(DhO`5QI%?ZlQ^p|BaQ zZdJT-;o`Z(cKpp6`<29&rbS^hT)j|X#}9X&LF~AHn#M-iH>j3IVKZF4NMR=qcWxqf z!arSO-%4z0coa6n)r%E&@^I&w#7_EWXzb{)ljX>8^%8~c9_~Dq*shP)fJK9~k*ng( zuzWcPI!UPyAf;3OnHrn#n+L;2@@7~*bpq^0^-Y&_qYq0I-qB$vu^E={cmTUeeU&8L z_A+=+#%-gJwPx4=Y_ zrNowYLh)u;mR`ZTRjpvBTm3BxTRwN~U#J7GCaH|gO*=B|)w=`s?hS}9US#j0JLJ6& zRPE_>+J6^3*>Y0*3TAG3ds`j&As`gogJdr&Z9HKk9lZZsbOksZlWxOd7io_$6SxA{ zdu}i*FAmmbb*shmX{x)&INLJ5i1vej!Ph%b?PcYy11`rf>+!$GewyO62oRQLaARIe7Oo}C6$ z(qJAc6AJZlOE$n|;+~_1jFx=t1Fv3k;DGN+sDXr~#u2ucA#`mW6n#Lk)AHWUAw5Rd zdmyDA9iesaReUhA`7@exHup2)S&QwQXlMLd>TZL?Y- z>@G8Rx_o+e1{-kL!a9ILv?|{~dTN4d&0xU5j@l)*xp)0r z2JZp&o*09Ftp%}TVNcGu~yWK}}epkWkXQ5m_^1-4_XRklINYRg)N8 z6**1`b<6kXW`r5OM2tl%deb&;WSvaglefPq81gF8(H{Zs=GLSN!*+bqS!p}=RLbJn z)0!9gS{Vi(0e$;Uv*t+A3nfW8Zbl0$wt>L;4)uqC}Ed6?pNXB6Y?UdbSEqHPKJE-PF|H=(#UxMKhuDUjmy9fbA8RPOY^f5J_fT8(rG%>!v!DB^oc0b z&U`Z1^GO;=4!)+}1

@$U9b|+!XWv!XWScVcyfu?h;D4skWh{RG{rG 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 z%0A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

k2ZK z{JmqLF^Qz@%+dz)iA-?&eKCP{fLqQB0@BXpz&hlYS`x!v5NEtYFrUo?_h?GHx3Rcw zy9?br<_{l5zE920p(7#t=jIUJF!W(q%H;NB{owJ%;|q;CJvgR$fQciS79sNZ-}_#y z{i%Y|zG}$E4NLi813TECePGW6liB&dJl=EoGtW-0|BDZQ;`}Jd!JdyCV2r*9uN?Rk z^Ud+80}ivXxFy!s4jfyUK9J7GrmP*9pZel~&o<^7lgAn>)3zL)nNkb>@A-G&G{ z`igAub$1`~NXM&j${I zzX?80**mB${kSEot>DwtrB82dp?`OB4Kw-hn?A&Ml$4`^zE7-H*X=`YU%=gLcOVz6 z?F+zDi>K*N9cT|2zUri@C;B+umw~dtr=u0;ADB(*QonWt*qY;Z=@V{8p!|E|l1jhV zAn223!iqk0wy0=os!}fL{~mJb^Q*#3`rTvCx3Yiwz^guDcOuvpXjFn=Jis2>hV?mM zEdVXW{W#be;kS+7Xs|2Tjw?#JD_BoCjiP_d?g;Ik>uCL2ZQs&?@fmVUmV7aIKXC4* z-Y*ygjnYxtr``zP>hbEhdhm>4+_9|BnRV8;Irt2v{R{J3jTTrg@$W;_)LEBPoIY8n zanv}8D*WI5*1!AWb_kmKm*8Aa8sD|YXsv#34SJ~CKj=0CUFpk-onyU{7S)Q|Y;2a7 zSvf-28=rCblDV87>C=SzNTPq*{(9v##^RNK`S*V~2AX-OA_yKA6aLG;|L-vHzX9Iv BHv<3w literal 494080 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∓m7I{pTHjBoW0U!fc|NJtz)Sk8GQ37TLN8vY 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 S%L&8%ucTT3tr>qk4E(>>#pG51 diff --git a/Newtonsoft.Json.dll.mdb b/Newtonsoft.Json.dll.mdb new file mode 100644 index 0000000000000000000000000000000000000000..9e0f14c1b12c71347b3e252bb89227ab4d666ace GIT binary patch literal 143997 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 Date: Fri, 21 Oct 2016 19:27:05 +0900 Subject: [PATCH 3/6] fixed a bug --- HTTPRequest/HTTPRequest.Unity.cs | 2 +- Mage/CommandCenter/TransportClient/CommandHTTPClient.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HTTPRequest/HTTPRequest.Unity.cs b/HTTPRequest/HTTPRequest.Unity.cs index 577af34..822b76a 100644 --- a/HTTPRequest/HTTPRequest.Unity.cs +++ b/HTTPRequest/HTTPRequest.Unity.cs @@ -39,7 +39,7 @@ public HttpRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { - Dictionary headersCopy = new Dictionary(headers); + Dictionary headersCopy = (headers != null) ? new Dictionary(headers) : new Dictionary(); // Set content type if provided if (contentType != null) diff --git a/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs b/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs index 4626357..b1efa7f 100644 --- a/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs +++ b/Mage/CommandCenter/TransportClient/CommandHTTPClient.cs @@ -67,7 +67,7 @@ public override void SerialiseBatch(CommandBatch commandBatch) commandBatch.SerialisedCache = (object)new CommandHttpClientCache( batchUrl, postData, - new Dictionary(headers) + (headers != null) ? new Dictionary(headers) : new Dictionary() ); } From d5a98f4ae9ae1a77a34a06814196841519568084 Mon Sep 17 00:00:00 2001 From: Almir Kadric Date: Sat, 22 Oct 2016 11:49:52 +0900 Subject: [PATCH 4/6] fixed according to pr comments --- HTTPRequest/HTTPRequest.DotNet.cs | 14 +++---- .../TransportClient/CommandJSONRPCClient.cs | 2 +- Mage/Logger/Writers/ConsoleWriter.cs | 39 +++++++++++-------- Mage/Mage.cs | 2 +- Mage/MessageStream/MessageStream.cs | 4 +- Tomes/TomeObject.cs | 4 +- Unity/UnityApplicationState.cs | 2 +- 7 files changed, 36 insertions(+), 31 deletions(-) diff --git a/HTTPRequest/HTTPRequest.DotNet.cs b/HTTPRequest/HTTPRequest.DotNet.cs index 41654bb..4f69be7 100644 --- a/HTTPRequest/HTTPRequest.DotNet.cs +++ b/HTTPRequest/HTTPRequest.DotNet.cs @@ -12,7 +12,7 @@ namespace Wizcorp.MageSDK.Network.Http { - public class HTTPRequest + public class HttpRequest { private HttpWebRequest request; private CookieContainer cookies; @@ -41,7 +41,7 @@ public long timeout // Constructor - public HTTPRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + public HttpRequest(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { // Start timeout timer timeoutTimer = new Timer((object state) => { @@ -172,24 +172,24 @@ public void Abort() // Create GET request and return it - public static HTTPRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) + public static HttpRequest Get(string url, Dictionary headers, CookieContainer cookies, Action cb) { // Create request and return it // The callback will be called when the request is complete - return new HTTPRequest(url, null, null, headers, cookies, cb); + return new HttpRequest(url, null, null, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, Action cb) + public static HttpRequest Post(string url, string contentType, string postData, Dictionary headers, CookieContainer cookies, Action cb) { byte[] binaryPostData = Encoding.UTF8.GetBytes(postData); return Post(url, contentType, binaryPostData, headers, cookies, cb); } // Create POST request and return it - public static HTTPRequest Post(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) + public static HttpRequest Post(string url, string contentType, byte[] postData, Dictionary headers, CookieContainer cookies, Action cb) { - return new HTTPRequest(url, contentType, postData, headers, cookies, cb); + return new HttpRequest(url, contentType, postData, headers, cookies, cb); } } } diff --git a/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs b/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs index 79a12fe..9d930ea 100644 --- a/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs +++ b/Mage/CommandCenter/TransportClient/CommandJSONRPCClient.cs @@ -18,7 +18,7 @@ private Mage Mage private Logger Logger { - get { return Mage.Logger("CommandJsonrpcClient"); } + get { return Mage.Logger("CommandJsonRpcClient"); } } private JsonRpc rpcClient = new JsonRpc(); diff --git a/Mage/Logger/Writers/ConsoleWriter.cs b/Mage/Logger/Writers/ConsoleWriter.cs index 83bffba..4232d4f 100644 --- a/Mage/Logger/Writers/ConsoleWriter.cs +++ b/Mage/Logger/Writers/ConsoleWriter.cs @@ -110,12 +110,25 @@ private string makeLogString(string channel, string context, string message) return String.Format("[{0}] [{1}] {2}", channel, context, message); } + private object makeDataString(object logData) + { + // Check if data is an excetion with a stack trace + var exception = logData as Exception; + if (exception != null && exception.StackTrace != null) + { + return exception + ":\n" + exception.StackTrace; + } + + // Otherwise log data as is using its toString function + return logData; + } + private void Verbose(object sender, LogEntry logEntry) { UnityEngine.Debug.Log(makeLogString("verbose", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.Log(logEntry.Data); + UnityEngine.Debug.Log(makeDataString(logEntry.Data)); } } @@ -124,7 +137,7 @@ private void Debug(object sender, LogEntry logEntry) UnityEngine.Debug.Log(makeLogString("debug", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.Log(logEntry.Data); + UnityEngine.Debug.Log(makeDataString(logEntry.Data)); } } @@ -133,7 +146,7 @@ private void Info(object sender, LogEntry logEntry) UnityEngine.Debug.Log(makeLogString("info", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.Log(logEntry.Data); + UnityEngine.Debug.Log(makeDataString(logEntry.Data)); } } @@ -142,7 +155,7 @@ private void Notice(object sender, LogEntry logEntry) UnityEngine.Debug.Log(makeLogString("notice", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.Log(logEntry.Data); + UnityEngine.Debug.Log(makeDataString(logEntry.Data)); } } @@ -151,7 +164,7 @@ private void Warning(object sender, LogEntry logEntry) UnityEngine.Debug.LogWarning(makeLogString("warning", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.LogWarning(logEntry.Data); + UnityEngine.Debug.LogWarning(makeDataString(logEntry.Data)); } } @@ -160,7 +173,7 @@ private void Error(object sender, LogEntry logEntry) UnityEngine.Debug.LogError(makeLogString("error", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.LogError(logEntry.Data); + UnityEngine.Debug.LogError(makeDataString(logEntry.Data)); } } @@ -169,15 +182,7 @@ private void Critical(object sender, LogEntry logEntry) UnityEngine.Debug.LogError(makeLogString("critical", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - if (logEntry.Data is Exception && (logEntry.Data as Exception).StackTrace != null) - { - var excpt = logEntry.Data as Exception; - UnityEngine.Debug.LogError(excpt + ":\n" + excpt.StackTrace); - } - else - { - UnityEngine.Debug.LogError(logEntry.Data); - } + UnityEngine.Debug.LogError(makeDataString(logEntry.Data)); } } @@ -186,7 +191,7 @@ private void Alert(object sender, LogEntry logEntry) UnityEngine.Debug.LogError(makeLogString("alert", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.LogError(logEntry.Data); + UnityEngine.Debug.LogError(makeDataString(logEntry.Data)); } } @@ -195,7 +200,7 @@ private void Emergency(object sender, LogEntry logEntry) UnityEngine.Debug.LogError(makeLogString("emergency", logEntry.Context, logEntry.Message)); if (logEntry.Data != null) { - UnityEngine.Debug.LogError(logEntry.Data); + UnityEngine.Debug.LogError(makeDataString(logEntry.Data)); } } } diff --git a/Mage/Mage.cs b/Mage/Mage.cs index b736f2f..a5cbd03 100644 --- a/Mage/Mage.cs +++ b/Mage/Mage.cs @@ -44,7 +44,7 @@ public Logger Logger(string context = null) } var newLogger = new Logger(context); - loggers.Add(context, new Logger(context)); + loggers.Add(context, newLogger); return newLogger; } diff --git a/Mage/MessageStream/MessageStream.cs b/Mage/MessageStream/MessageStream.cs index 97c8f15..1ec6206 100644 --- a/Mage/MessageStream/MessageStream.cs +++ b/Mage/MessageStream/MessageStream.cs @@ -142,11 +142,11 @@ public void SetTransport(TransportType transport) switch (transport) { case TransportType.SHORTPOLLING: - Func getShortPollingEndpoint = () => GetHttpPollingEndpoint("shortpolling"); + Func getShortPollingEndpoint = () => { return GetHttpPollingEndpoint("shortpolling"); }; transportClient = new ShortPolling(getShortPollingEndpoint, GetHttpHeaders, ProcessMessagesString); break; case TransportType.LONGPOLLING: - Func getLongPollingEndpoint = () => GetHttpPollingEndpoint("longpolling"); + Func getLongPollingEndpoint = () => { return GetHttpPollingEndpoint("longpolling"); }; transportClient = new LongPolling(getLongPollingEndpoint, GetHttpHeaders, ProcessMessagesString); break; default: diff --git a/Tomes/TomeObject.cs b/Tomes/TomeObject.cs index 0dfeff6..e2071bf 100644 --- a/Tomes/TomeObject.cs +++ b/Tomes/TomeObject.cs @@ -237,10 +237,10 @@ public void Del(string propertyName) switch (property.Type) { case JTokenType.Array: - ((TomeArray)property as TomeArray).Destroy(); + ((TomeArray)property).Destroy(); break; case JTokenType.Object: - ((TomeObject)property as TomeObject).Destroy(); + ((TomeObject)property).Destroy(); break; default: var tomeValue = property as TomeValue; diff --git a/Unity/UnityApplicationState.cs b/Unity/UnityApplicationState.cs index 0af891d..e6346bb 100644 --- a/Unity/UnityApplicationState.cs +++ b/Unity/UnityApplicationState.cs @@ -15,7 +15,7 @@ void OnApplicationPause(bool pauseStatus) { if (OnAppStateChanged != null) { - OnAppStateChanged.Invoke(pauseStatus); + OnAppStateChanged.Invoke(pauseStatus); } } } From 0ab5108e9112b14d6bbaaec7cf7248b622daad8b Mon Sep 17 00:00:00 2001 From: Almir Kadric Date: Sat, 22 Oct 2016 11:53:39 +0900 Subject: [PATCH 5/6] fixed according to pr comments --- Mage/Archivist/Archivist.cs | 2 +- Mage/EventManager.cs | 2 +- Mage/MessageStream/MessageStream.cs | 2 +- Mage/MessageStream/TransportClient/LongPolling.cs | 2 +- Mage/MessageStream/TransportClient/ShortPolling.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Mage/Archivist/Archivist.cs b/Mage/Archivist/Archivist.cs index 17ed7ba..7eb47c0 100644 --- a/Mage/Archivist/Archivist.cs +++ b/Mage/Archivist/Archivist.cs @@ -17,7 +17,7 @@ private Mage Mage private Logger Logger { - get { return Mage.Logger("archivist"); } + get { return Mage.Logger("Archivist"); } } // Local cache of all retrieved vault values diff --git a/Mage/EventManager.cs b/Mage/EventManager.cs index 8e81efb..d747bc2 100644 --- a/Mage/EventManager.cs +++ b/Mage/EventManager.cs @@ -14,7 +14,7 @@ private Mage Mage private Logger Logger { - get { return Mage.Logger("eventManager"); } + get { return Mage.Logger("EventManager"); } } diff --git a/Mage/MessageStream/MessageStream.cs b/Mage/MessageStream/MessageStream.cs index 1ec6206..3e77caf 100644 --- a/Mage/MessageStream/MessageStream.cs +++ b/Mage/MessageStream/MessageStream.cs @@ -20,7 +20,7 @@ private static Mage Mage private static Logger Logger { - get { return Mage.Logger("messagestream"); } + get { return Mage.Logger("MessageStream"); } } // Endpoint and credentials diff --git a/Mage/MessageStream/TransportClient/LongPolling.cs b/Mage/MessageStream/TransportClient/LongPolling.cs index 1edb388..f521462 100644 --- a/Mage/MessageStream/TransportClient/LongPolling.cs +++ b/Mage/MessageStream/TransportClient/LongPolling.cs @@ -16,7 +16,7 @@ private static Mage Mage private static Logger Logger { - get { return Mage.Logger("longpolling"); } + get { return Mage.Logger("LongPolling"); } } // Required functions for poll requests diff --git a/Mage/MessageStream/TransportClient/ShortPolling.cs b/Mage/MessageStream/TransportClient/ShortPolling.cs index f2daa61..3543c71 100644 --- a/Mage/MessageStream/TransportClient/ShortPolling.cs +++ b/Mage/MessageStream/TransportClient/ShortPolling.cs @@ -16,7 +16,7 @@ private static Mage Mage private static Logger Logger { - get { return Mage.Logger("shortpolling"); } + get { return Mage.Logger("ShortPolling"); } } // Required functions for poll requests From cf3f1245f578e9b305f79730a6cc3cd531a09fcd Mon Sep 17 00:00:00 2001 From: Almir Kadric Date: Sat, 22 Oct 2016 12:26:54 +0900 Subject: [PATCH 6/6] fixed a bug i found --- HTTPRequest/HTTPRequest.Unity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HTTPRequest/HTTPRequest.Unity.cs b/HTTPRequest/HTTPRequest.Unity.cs index 822b76a..7703b34 100644 --- a/HTTPRequest/HTTPRequest.Unity.cs +++ b/HTTPRequest/HTTPRequest.Unity.cs @@ -151,7 +151,7 @@ public void Abort() } WWW request = this.request; - request = null; + this.request = null; request.Dispose(); timeoutTimer.Stop();