Example #1
0
        public void Start(Component.SLComponent root, params Type[] templates)
        {
            if (!_state.Is(EState.Closed))
            {
                throw new InvalidOperationException($"wrong state: {_state.ToString()}");
            }

            Task.Factory.StartNew(() =>
            {
                var fq           = _state.Frequency;
                var dispatcher   = new Execution.Terminal.RawDispatcher(_state.EndPoint);
                var executorList = new List <Execution.ISLExecutor>(templates.Length);
                for (int i = 0; i != templates.Length; i++)
                {
                    var exe = (Execution.ISLExecutor)Activator.CreateInstance(templates[i]);
                    executorList.Add(exe);
                }

                _state.Set(EState.Running);
                while (_state.Is(EState.Running))
                {
                    var begin = Library.Ticker.MS;
                    try
                    {
                        for (int i = 0; i != executorList.Count; i++)
                        {
                            try
                            {
                                executorList[i].ExecuteFrame(ref dispatcher, root);
                            }
                            catch (ArgumentException e) { Library.Logger.Error($"{_state.ToString()}\n[Engine::{executorList[i].GetType().Name}]\n{e.Message}\n{e.StackTrace}"); }
                            catch (KeyNotFoundException e) { Library.Logger.Error($"{_state.ToString()}\n[Engine::{executorList[i].GetType().Name}]\n{e.Message}\n{e.StackTrace}"); }
                            catch (Exception) { Library.Logger.Error($"{_state.ToString()}\n[Engine::{executorList[i].GetType().Name}]\n"); throw; }
                        }
                    }
                    catch (Exception e) { Library.Logger.Exception(typeof(Engine), e); }
                    finally
                    {
                        var end = Library.Ticker.MS;
                        int leg = (int)(end - begin) - fq;
                        if (leg < 0)
                        {
                            Thread.Sleep(-leg);
                        }
                    }
                }

                _state.Set(EState.Closed);
            });
        }
Example #2
0
        public static Component.SLComponent _defaultConstructForTest(Component.SLComponent root)
        {
            var com = Component.SLComponent.Factory.Create(root, Component.ComponentType.Service);

            unsafe
            {
                var serviceProp = com.Get <Component.Property.Service>();
                serviceProp->maxDestroyCount = 9999;
                serviceProp->destroyCount    = 0;
            }

            var pkCom1 = Component.SLComponent.Factory.Create(com, Component.ComponentType.Package, Component.PackageKey.Observer);
            var pkCom2 = Component.SLComponent.Factory.Create(com, Component.ComponentType.Package, Component.PackageKey.Cell);

            return(com);
        }
Example #3
0
        public static Engine RunNewService <TService>(this WebSocketServer wssv, Component.SLComponent root, string path, params Type[] templates)
            where TService : WebSocketBehavior, new()
        {
            wssv.AddWebSocketService <TService>(path);

            var awaiter    = Component.SLComponent.Factory.LoadAsync(root, path).GetAwaiter();
            var serviceCom = awaiter.GetResult();

            if (serviceCom == null)
            {
                serviceCom = Function._defaultConstructForTest(root);
            }

            var ep = Function.ParseEndPoint(path);

            root.LinkTo(ep, serviceCom);

            var engine = new Engine(ep, 60);

            engine.Start(serviceCom, templates);
            return(engine);
        }