Ejemplo n.º 1
0
        //APM implementation of BeginCheckDeviceVersion

        public IAsyncResult BeginCheckDeviceVersion(Services svc, int devId, AsyncCallback cb, object state)
        {
            AsyncCallback onGetDeviceAddress = null, onGetVersionFromDevice = null, onGetStoredVersion = null;
            var           gar = new GenericAsyncResult <bool>(cb, state, false);
            int           stateCount = 2; //to control completion
            int           devVer = -1, stoVer = -1;

            onGetDeviceAddress = (_ar) =>
            {
                string devAddr = svc.EndGetDeviceAddress(_ar);
                svc.BeginGetVersionFromDevice(devAddr, onGetVersionFromDevice, null);
            };

            onGetVersionFromDevice = (_ar) =>
            {
                devVer = svc.EndGetVersionFromDevice(_ar);
                if (Interlocked.Decrement(ref stateCount) == 0)
                {
                    gar.SetResult(devVer == stoVer);
                }
            };

            onGetStoredVersion = (_ar) =>
            {
                stoVer = svc.EndGetStoredVersion(_ar);
                if (Interlocked.Decrement(ref stateCount) == 0)
                {
                    gar.SetResult(devVer == stoVer);
                }
            };

            svc.BeginGetDeviceAddress(devId, onGetDeviceAddress, null);
            svc.BeginGetStoredVersion(devId, onGetStoredVersion, null);
            return(gar);
        }
Ejemplo n.º 2
0
        private IAsyncResult BeginListen(TcpListener server, Logger logger, CancellationToken cToken, AsyncCallback acb, object state)
        {
            GenericAsyncResult <bool> gar = new GenericAsyncResult <bool>(acb, state, false);
            int       activeConnections   = 0;
            TcpClient tcpClient           = null;

            server.BeginAcceptTcpClient(onAcceptClient, null);
            void onAcceptClient(IAsyncResult ar)
            {
                tcpClient = server.EndAcceptTcpClient(ar);
                if (!cToken.IsCancellationRequested && Interlocked.Increment(ref activeConnections) < MAX_ACTIVE_CONNECTIONS)
                {
                    server.BeginAcceptTcpClient(onAcceptClient, null);
                }
                BeginHandlerRunner(tcpClient, logger, onHandlerRunner, null);
            }

            void onHandlerRunner(IAsyncResult ar)
            {
                if (!cToken.IsCancellationRequested && Interlocked.Decrement(ref activeConnections) == MAX_ACTIVE_CONNECTIONS - 1)
                {
                    server.BeginAcceptTcpClient(onAcceptClient, null);
                }
                else if (cToken.IsCancellationRequested && Interlocked.Decrement(ref activeConnections) == 0)
                {
                    tcpClient.Close();
                    gar.SetResult(true);
                }
            }

            return(gar);
        }
Ejemplo n.º 3
0
        // Fake implementation of the Services interface methods

        public IAsyncResult BeginGetDeviceAddress(int devId, AsyncCallback callback, object state)
        {
            GenericAsyncResult <String> ar = new GenericAsyncResult <String>(callback, state, false);

            new Timer((_) => ar.SetResult("device42"), null, 1000, Timeout.Infinite);
            return(ar);
        }
Ejemplo n.º 4
0
        public IAsyncResult BeginGetStoredVersion(int devId, AsyncCallback callback, object state)
        {
            GenericAsyncResult <int> ar = new GenericAsyncResult <int>(callback, state, false);

            new Timer((_) => ar.SetResult(42), null, 200, Timeout.Infinite);
            return(ar);
        }
Ejemplo n.º 5
0
        public IAsyncResult BeginGetVersionFromDevice(String addr, AsyncCallback callback, object state)
        {
            GenericAsyncResult <int> ar = new GenericAsyncResult <int>(callback, state, false);

            new Timer((_) => ar.SetResult(42), null, 100, Timeout.Infinite);
            return(ar);
        }
Ejemplo n.º 6
0
            IAsyncResult Service.BeginFindId(String name, String bdate, AsyncCallback cb, Object st)
            {
                GenericAsyncResult <int> ar = new GenericAsyncResult <int>(cb, st, false);

                new Timer(
                    (_) => ar.SetResult(42), null,
                    new Random(Environment.TickCount).Next(1000),
                    Timeout.Infinite
                    );
                return(ar);
            }
Ejemplo n.º 7
0
            IAsyncResult Service.BeginObtainAvatarUri(int userId, AsyncCallback cb, Object st)
            {
                GenericAsyncResult <Uri> ar = new GenericAsyncResult <Uri>(cb, st, false);

                new Timer(
                    (_) => ar.SetResult(new Uri("http://google.com")),
                    null,
                    new Random(Environment.TickCount).Next(1000),
                    Timeout.Infinite
                    );
                return(ar);
            }
Ejemplo n.º 8
0
        public static IAsyncResult BeginGetUserAvatar(Service svc, string name, string bdate, AsyncCallback cb, object state)
        {
            GenericAsyncResult <Uri> gar = new GenericAsyncResult <Uri>(cb, state, false);
            AsyncCallback            onObtainAvatarUri = (_ant) =>
            {
                var uri = svc.EndObtainAvatarUri(_ant);
                gar.SetResult(uri);
            };

            AsyncCallback onFindId = (_ant) =>
            {
                int id = svc.EndFindId(_ant);
                svc.BeginObtainAvatarUri(id, onObtainAvatarUri, null);
            };

            svc.BeginFindId(name, bdate, onFindId, null);
            return(gar);
        }
Ejemplo n.º 9
0
        public IAsyncResult BeginExecOnNearServer <S, R>(IAPMServices <S, R> s, Uri[] servers, S service,
                                                         AsyncCallback ac, object state)
        {
            GenericAsyncResult <R> gar = new GenericAsyncResult <R>(ac, state, false);
            int got = 0, failures = 0;

            for (int i = 0; i < servers.Length; i++)
            {
                s.BeginPingServer(servers[i], onPingServer, null);
            }
            void onPingServer(IAsyncResult ar)
            {
                try
                {
                    Uri uri = s.EndPingServer(ar);
                    if (Interlocked.Exchange(ref got, 1) == 0)
                    {
                        s.BeginExecService(uri, service, onExecService, null);
                    }
                }
                catch (Exception ex)
                {
                    if (Interlocked.Increment(ref failures) == servers.Length)
                    {
                        gar.SetException(ex);
                    }
                }
            }

            void onExecService(IAsyncResult ar)
            {
                try
                {
                    gar.SetResult(s.EndExecService(ar));
                }
                catch (Exception ex)
                {
                    gar.SetException(ex);
                }
            }

            return(gar);
        }