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); } }
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]); } }