From d682833cea41e4a8f80f64bfd8560ddb84d4287c Mon Sep 17 00:00:00 2001 From: Sebastiano Mandala Date: Fri, 3 Jan 2020 13:55:48 +0000 Subject: [PATCH] Move Svelto.Services on its own repository --- .../Experimental/IServiceEventContainer.cs | 11 -- .../IServiceEventContainerFactory.cs | 8 - .../Experimental/IServiceEventListener.cs | 14 -- .../Experimental/ServiceEventContainer.cs | 41 ---- Svelto.Services/IServiceRequest.cs | 15 -- Svelto.Services/IServiceRequestsFactory.cs | 8 - .../ServiceRequestFactoryArgumentException.cs | 10 - Svelto.Services/ServiceRequestsFactory.cs | 50 ----- Svelto.Services/Svelto.Services.asmdef | 17 -- Svelto.Services/Unity/Web/IResponseHandler.cs | 19 -- .../Unity/Web/StandardWebRequest.cs | 176 ------------------ .../Unity/Web/UnityDownloadHandler.cs | 61 ------ 12 files changed, 430 deletions(-) delete mode 100644 Svelto.Services/Experimental/IServiceEventContainer.cs delete mode 100644 Svelto.Services/Experimental/IServiceEventContainerFactory.cs delete mode 100644 Svelto.Services/Experimental/IServiceEventListener.cs delete mode 100644 Svelto.Services/Experimental/ServiceEventContainer.cs delete mode 100644 Svelto.Services/IServiceRequest.cs delete mode 100644 Svelto.Services/IServiceRequestsFactory.cs delete mode 100644 Svelto.Services/ServiceRequestFactoryArgumentException.cs delete mode 100644 Svelto.Services/ServiceRequestsFactory.cs delete mode 100644 Svelto.Services/Svelto.Services.asmdef delete mode 100644 Svelto.Services/Unity/Web/IResponseHandler.cs delete mode 100644 Svelto.Services/Unity/Web/StandardWebRequest.cs delete mode 100644 Svelto.Services/Unity/Web/UnityDownloadHandler.cs diff --git a/Svelto.Services/Experimental/IServiceEventContainer.cs b/Svelto.Services/Experimental/IServiceEventContainer.cs deleted file mode 100644 index cca960d..0000000 --- a/Svelto.Services/Experimental/IServiceEventContainer.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace Svelto.ServiceLayer.Experimental -{ - public interface IServiceEventContainer : IDisposable - { - //Delegate constraints to store delegates without needing a signature - void ListenTo(TDelegate callBack) - where TListener : class, IServiceEventListener where TDelegate : Delegate; - } -} diff --git a/Svelto.Services/Experimental/IServiceEventContainerFactory.cs b/Svelto.Services/Experimental/IServiceEventContainerFactory.cs deleted file mode 100644 index 801263e..0000000 --- a/Svelto.Services/Experimental/IServiceEventContainerFactory.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace Svelto.ServiceLayer.Experimental -{ - interface IServiceEventContainerFactory - { - IServiceEventContainer Create(); - } -} diff --git a/Svelto.Services/Experimental/IServiceEventListener.cs b/Svelto.Services/Experimental/IServiceEventListener.cs deleted file mode 100644 index 694da39..0000000 --- a/Svelto.Services/Experimental/IServiceEventListener.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace Svelto.ServiceLayer.Experimental -{ - public interface IServiceEventListener : IServiceEventListenerBase where TDelegate : Delegate - { - void SetCallback(TDelegate callback); - } - - // This interface exists so we can use one type which can represent any of the interfaces above - public interface IServiceEventListenerBase : IDisposable - { - } -} diff --git a/Svelto.Services/Experimental/ServiceEventContainer.cs b/Svelto.Services/Experimental/ServiceEventContainer.cs deleted file mode 100644 index 29e3423..0000000 --- a/Svelto.Services/Experimental/ServiceEventContainer.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Svelto.ServiceLayer.Experimental -{ - public abstract class ServiceEventContainer : IServiceEventContainer - { - public void Dispose() - { - foreach (var listener in _listeners) - { - listener.Dispose(); - } - - _listeners.Clear(); - } - - protected ServiceEventContainer() - { - //call all the AddRelation in the implementation if you wish - } - - public void ListenTo(TDelegate callBack) - where TListener : class, IServiceEventListener where TDelegate : Delegate - { - var concreteType = _registeredTypes[typeof(TListener)]; - var listener = (TListener)Activator.CreateInstance(concreteType); - listener.SetCallback(callBack); - _listeners.Add(listener); - } - - protected void AddRelation() where TInterface : IServiceEventListenerBase - where TConcrete : TInterface - { - _registeredTypes.Add(typeof(TInterface), typeof(TConcrete)); - } - - readonly List _listeners = new List(); - readonly Dictionary _registeredTypes = new Dictionary(); - } -} \ No newline at end of file diff --git a/Svelto.Services/IServiceRequest.cs b/Svelto.Services/IServiceRequest.cs deleted file mode 100644 index 23b7bd9..0000000 --- a/Svelto.Services/IServiceRequest.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using Svelto.Tasks; - -namespace Svelto.ServiceLayer -{ - public interface IServiceRequest - { - IEnumerator Execute(); - } - - public interface IServiceRequest: IServiceRequest - { - IServiceRequest Inject(TDependency registerData); - } -} diff --git a/Svelto.Services/IServiceRequestsFactory.cs b/Svelto.Services/IServiceRequestsFactory.cs deleted file mode 100644 index affca17..0000000 --- a/Svelto.Services/IServiceRequestsFactory.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Svelto.ServiceLayer -{ - public interface IServiceRequestsFactory - { - RequestInterface Create() where RequestInterface:class, IServiceRequest; - } -} - diff --git a/Svelto.Services/ServiceRequestFactoryArgumentException.cs b/Svelto.Services/ServiceRequestFactoryArgumentException.cs deleted file mode 100644 index a304d5f..0000000 --- a/Svelto.Services/ServiceRequestFactoryArgumentException.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Svelto.ServiceLayer -{ - public class ServiceRequestFactoryArgumentException: ArgumentException - { - public ServiceRequestFactoryArgumentException(string message):base(message) - {} - } -} \ No newline at end of file diff --git a/Svelto.Services/ServiceRequestsFactory.cs b/Svelto.Services/ServiceRequestsFactory.cs deleted file mode 100644 index e29b1e0..0000000 --- a/Svelto.Services/ServiceRequestsFactory.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Svelto.ServiceLayer -{ - public abstract class ServiceRequestsFactory : IServiceRequestsFactory - { - public RequestInterface Create() where RequestInterface : class, IServiceRequest - { - var ret = RetrieveObjectType(); - - return ret.CreateInstance() as RequestInterface; - } - - protected void AddRelation() where RequestClass : class, RequestInterface, new() - where RequestInterface : IServiceRequest - - { - _requestMap[typeof(RequestInterface)] = new Value(); - } - - IHoldValue RetrieveObjectType() - { - if (_requestMap.ContainsKey(typeof(RequestInterface)) == false) - throw new ServiceRequestFactoryArgumentException("Request not registered"); - - var ret = _requestMap[typeof(RequestInterface)]; - - if (ret == null) - throw new ServiceRequestFactoryArgumentException("Request not found"); - - return ret; - } - - readonly Dictionary _requestMap = new Dictionary(); - - interface IHoldValue - { - IServiceRequest CreateInstance(); - } - - class Value : IHoldValue where RequestClass : class, IServiceRequest, new() - { - public IServiceRequest CreateInstance() - { - return new RequestClass(); - } - } - } -} diff --git a/Svelto.Services/Svelto.Services.asmdef b/Svelto.Services/Svelto.Services.asmdef deleted file mode 100644 index ab050d2..0000000 --- a/Svelto.Services/Svelto.Services.asmdef +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "Svelto.Services", - "references": [ - "Svelto.Common", - "Svelto.Tasks", - "Utf8Json" - ], - "optionalUnityReferences": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [] -} \ No newline at end of file diff --git a/Svelto.Services/Unity/Web/IResponseHandler.cs b/Svelto.Services/Unity/Web/IResponseHandler.cs deleted file mode 100644 index f8250b0..0000000 --- a/Svelto.Services/Unity/Web/IResponseHandler.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Svelto.Services -{ - public interface IResponseHandler : IResponseHandler - { - ResponseType response { get; } - } - - public interface IResponseHandler - { - // Called once per frame when data has been received from the network. - bool ReceiveData(byte[] data, int dataLength); - - // Called when all data has been received from the server and delivered via ReceiveData. - void CompleteContent(); - - // Called when a Content-Length header is received from the server. - void ReceiveContentLength(int contentLength); - } -} \ No newline at end of file diff --git a/Svelto.Services/Unity/Web/StandardWebRequest.cs b/Svelto.Services/Unity/Web/StandardWebRequest.cs deleted file mode 100644 index e024f7c..0000000 --- a/Svelto.Services/Unity/Web/StandardWebRequest.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using UnityEngine; -using System.Security.Cryptography.X509Certificates; -using System.Net.Security; -using Svelto.Tasks; -using Svelto.Tasks.Enumerators; -using UnityEngine.Networking; - -namespace Svelto.Services -{ - public enum Method - { - GET, - POST - } - - public enum Result - { - Success, - ServerHandledError, - ServerException, - ClientFailure, - } - - public sealed class StandardWebRequest - { - static StandardWebRequest() - { - ServicePointManager.ServerCertificateValidationCallback = CannotVerifyMessageCertificate; - - ServicePointManager.DefaultConnectionLimit = 64; - } - - public Result result { get; private set; } - - public int maxAttempts = 3; - public int waitOnRetrySeconds = 1; - public int timeoutSeconds = 10; - - public Method method = Method.POST; - public Func processStatusCodes = code => false; - public IResponseHandler responseHandler; - public string URL; - - public IEnumerator Execute(byte[] bodyRaw) - { - int attemptNumber = 0; - - do - { - using (UnityWebRequest request = new UnityWebRequest()) - { - switch (method) - { - case Method.GET: - request.method = UnityWebRequest.kHttpVerbGET; - break; - case Method.POST: - request.method = UnityWebRequest.kHttpVerbPOST; - break; - default: - request.method = UnityWebRequest.kHttpVerbPOST; - break; - } - - request.url = URL; - request.uploadHandler = new UploadHandlerRaw(bodyRaw); - request.downloadHandler = new UnityDownloadHandler(responseHandler); - request.SetRequestHeader("Content-Type", "application/json"); - request.timeout = timeoutSeconds; - - AsyncOperation op = request.SendWebRequest(); - - while (op.isDone == false) - { - yield return Yield.It; - } - - if (request.isNetworkError == false) - { - if (ProcessResponse(request) == true) - { - result = Result.Success; - - Svelto.Console.LogDebug("web request completed"); - - yield break; - } - else - { - Svelto.Console.LogDebug("web request completed with failure ", URL); - - try - { - responseHandler?.CompleteContent(); - - result = Result.ServerHandledError; - } - catch - { - result = Result.ServerException; - } - - yield break; //no retry on server error! - } - } - else - if (++attemptNumber < maxAttempts) - { - var wait = new ReusableWaitForSecondsEnumerator(waitOnRetrySeconds); - - while (wait.MoveNext() == true) yield return Yield.It; - - Svelto.Console.LogDebug("web request retry"); - - continue; //retry on client error - } - else - { - result = Result.ClientFailure; - - yield break; - } - } - } - while (true); - } - - bool ProcessResponse(UnityWebRequest request) - { - HttpStatusCode statusCode = (HttpStatusCode) request.responseCode; - - if (statusCode != HttpStatusCode.OK) - if (processStatusCodes(statusCode) == false) - return false; - - return true; - } - - // BOC:: After turning on SSL on the gameserver we started getting certificate problems. - // Found this solution on Stack Overflow with Mike R - // (https://stackoverflow.com/questions/4926676/mono-https-webrequest-fails-with-the-authentication-or-decryption-has-failed) - static bool CannotVerifyMessageCertificate(System.Object sender, X509Certificate certificate, X509Chain chain, - SslPolicyErrors sslPolicyErrors) - { - bool isOk = true; - - // If there are errors in the certificate chain, - // look at each error to determine the cause. - if (sslPolicyErrors != SslPolicyErrors.None) - { - for (int i = 0; i < chain.ChainStatus.Length; i++) - { - if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown) - continue; - - chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; - chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; - chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0); - chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; - - bool chainIsValid = chain.Build((X509Certificate2) certificate); - if (!chainIsValid) - { - isOk = false; - break; - } - } - } - - return isOk; - } - } -} \ No newline at end of file diff --git a/Svelto.Services/Unity/Web/UnityDownloadHandler.cs b/Svelto.Services/Unity/Web/UnityDownloadHandler.cs deleted file mode 100644 index 60100da..0000000 --- a/Svelto.Services/Unity/Web/UnityDownloadHandler.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.IO; -using System.Text; -using UnityEngine.Networking; - -namespace Svelto.Services -{ - public class UnityDownloadHandler : DownloadHandlerScript - { - public string GetError() - { - if (String.IsNullOrEmpty(_errorString) == true) - { - MemoryStream errorBuffer = new MemoryStream(_dataLength); - - errorBuffer.Write(data, 0, _dataLength); - - _errorString = Encoding.UTF8.GetString(errorBuffer.GetBuffer(), 0, (int) errorBuffer.Length); - - errorBuffer.Dispose(); - } - - return _errorString; - } - - protected override bool ReceiveData(byte[] data, int dataLength) - { - if (data.Length < 1) - return false; // No need to receive data - - _data = data; - _dataLength = dataLength; - - if (_handler == null) - return false; // No need to receive data - - return _handler.ReceiveData(data, dataLength); - } - - public UnityDownloadHandler(IResponseHandler handler) - { - _handler = handler; - } - - protected override byte[] GetData() - { - return _data; - } - - // Called when all data has been received from the server and delivered via ReceiveData. - protected override void CompleteContent() - { - _handler?.CompleteContent(); - } - - readonly IResponseHandler _handler; - byte[] _data; - int _dataLength; - string _errorString; - } -} \ No newline at end of file