Beispiel #1
0
        public override void UnionFromProxyHandler(UnionMessageReader request)
        {
            if (request.cellidsA.Count == 0)
            {
                UnionServerResponseWriter msg = new UnionServerResponseWriter(request.cellidsB, Global.MyServerId);
                Global.CloudStorage.UnionFromServerToDatabaseProxy(0, msg);
            }
            else
            {
                List <List <long> > res      = new List <List <long> >();
                List <int>          conda    = new List <int>();
                List <List <long> > cellids  = request.cellidsA;
                List <List <long> > cellidsb = request.cellidsB;

                for (int i = 0; i < cellids[0].Count; i++)
                {
                    conda.Add(i);
                }
                List <List <Element> > correspondA = Table.getCorrespon(conda, cellids);
                List <List <Element> > correspondB = Table.getCorrespon(conda, cellidsb);
                Table.QuickSort(correspondA, 0, correspondA.Count - 1, cellids);
                for (int i = 0; i < correspondB.Count; i++)
                {
                    if (Table.BinSearch(correspondA, correspondB[i], 0) < 0)//don't match
                    {
                        res.Add(cellidsb[i]);
                    }
                }
                UnionServerResponseWriter msg = new UnionServerResponseWriter(res, Global.MyServerId);
                Global.CloudStorage.UnionFromServerToDatabaseProxy(0, msg);
            }
        }
Beispiel #2
0
        public override void UnionFromClientHandler(UnionMessageReader request, UnionResponseWriter response)
        {
            idDict.Clear();
            List <List <List <long> > > classify = Classify(request.cellidsB, null);

            for (int i = 0; i < Global.ServerCount; i++)
            {
                UnionMessageWriter msg = new UnionMessageWriter(request.cellidsA, classify[i]);
                Global.CloudStorage.UnionFromProxyToDatabaseServer(i, msg);
            }
            sem.WaitOne();
            for (int i = 0; i < Global.ServerCount; i++)
            {
                response.cellids.AddRange(idDict[i]);
            }
        }