예제 #1
0
파일: ProxyThread.cs 프로젝트: ZakharL/MRI
        private void HandleUpdateRequest(MongoUpdateMessage request)
        {
            _querySynchronizer.StartBlockingAction();
            try
            {
                var referenceBeforeChanges = MongoMessageHandler.GetChanges(request);
                SendRequestToServer(request);

                var checkErrorRequest = ReadClientRequest();
                if (checkErrorRequest.GetType() != typeof(MongoQueryMessage) &&
                    !MessageDataExtractor.IsHasErrorRequest(checkErrorRequest))
                {
                    //TODO: throw error. Und format
                }

                SendRequestToServer(checkErrorRequest);
                var hasErrorResponse = ReadServerResponse();

                if (!MessageDataExtractor.IsHasError(hasErrorResponse))
                {
                    var referenecesAfterChanges = MongoMessageHandler.GetChanges(request);
                    MongoMessageHandler.ApplyUpdateChanges(referenceBeforeChanges, referenecesAfterChanges);
                }

                SendResponseToClient(hasErrorResponse);

            }
            catch (Exception)
            {
                //TODO:
                throw;
            }
            finally
            {
                _querySynchronizer.StopBlockingAction();
            }
        }
예제 #2
0
 public static List<ReferencePack> GetChanges(MongoUpdateMessage request)
 {
     return DataProviderFactory.GetDataProvider().Read( request.FullCollectionName, request.Selector );
 }