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(); } }
public static List<ReferencePack> GetChanges(MongoUpdateMessage request) { return DataProviderFactory.GetDataProvider().Read( request.FullCollectionName, request.Selector ); }