public static async Task<KS.KSObject> ProcessBuffer(byte[] buffer) { #if !UNITY_WEBGL || UNITY_EDITOR await new WaitForBackgroundThread(); return await Task.Run<KS.KSObject>(() => { #endif Message message = new Message(); message.Deserialize(buffer); var baseMessageType = Helper.Assembly.GetType("KS.Messages." + message.Type); KS.KSObject baseMessage = Activator.CreateInstance(baseMessageType) as KS.KSObject; baseMessage.Deserialize(message.Payload.ISOGetBytes()); if (baseMessage.Name() == SceneActions.NameStatic) { var sceneActions = (SceneActions)baseMessage; sceneActions.ParsedActions = new List<KS.KSObject>(sceneActions.ActionTypes.Count); for (int i = 0; i < sceneActions.ActionTypes.Count; i++) { var action = KS.KSObject.GetAction(sceneActions.ActionTypes[i], sceneActions.ActionPayloads[i]); sceneActions.ParsedActions.Add(action); } } return baseMessage; #if !UNITY_WEBGL || UNITY_EDITOR }); #endif }