Beispiel #1
0
 public SampleService(IFoo foo, IBar bar, ISingleton singleton, ITransient transient, IAsyncClass asyncClass)
 {
     _id         = Guid.NewGuid();
     _foo        = foo ?? throw new ArgumentNullException(nameof(foo));
     _bar        = bar ?? throw new ArgumentNullException(nameof(bar));
     _singleton  = singleton ?? throw new ArgumentNullException(nameof(singleton));
     _transient  = transient ?? throw new ArgumentNullException(nameof(transient));
     _asyncClass = asyncClass ?? throw new ArgumentNullException(nameof(asyncClass));
 }
Beispiel #2
0
        void AsyncMessageRecieved(ASyncPackage package)
        {
            IAsyncClass asyncClass;

            if (package.Message is TcpRemoteCloseException)
            {
                //Tcp connection closed
                //Release all classes
                lock (_ClassIdLock)
                {
                    IAsyncClass[] iAsyncClass;

                    lock (_LockObj)
                    {
                        iAsyncClass = new IAsyncClass[_ClassDict.Count];
                        _ClassDict.Values.CopyTo(iAsyncClass, 0);
                    }


                    foreach (IAsyncClass aClass in iAsyncClass)
                    {
                        try
                        {
                            aClass.ReceiveMessage(package.Message);
                        }
                        catch
                        {
                        }
                    }

                    lock (_LockObj)
                    {
                        _ClassDict.Clear();
                    }
                }
                return;
            }

            lock (_ClassIdLock)
            {
                if (!_ClassDict.TryGetValue(package.ClassId, out asyncClass))
                {
                    //If hubblecommand query timeout
                    //It will not find the class id when package return from server.
                    //Doesn't matter

                    Console.WriteLine(string.Format("AsyncTcp Manager, class id = {0} is not find",
                                                    package.ClassId));
                    return;
                }
            }

            asyncClass.ReceiveMessage(package.Message);
        }
Beispiel #3
0
        internal int GetClassId(IAsyncClass asyncClass)
        {
            lock (_ClassIdLock)
            {
                _ClassId++;

                if (_ClassId == int.MaxValue)
                {
                    _ClassId = 0;
                }

                _ClassDict.Add(_ClassId, asyncClass);
                return(_ClassId);
            }
        }