Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: lib/src/appengine_internal.dart

Issue 775043002: Add withAppEngineService() to package:appengine (Closed) Base URL: git@github.com:dart-lang/appengine.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« lib/appengine.dart ('K') | « lib/appengine.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library appengine.internal; 5 library appengine.internal;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:gcloud/service_scope.dart' as ss; 10 import 'package:gcloud/service_scope.dart' as ss;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 return new Future.value(); 90 return new Future.value();
91 } 91 }
92 } else { 92 } else {
93 return auth.clientViaMetadataServer().then((client) { 93 return auth.clientViaMetadataServer().then((client) {
94 _authClient = client; 94 _authClient = client;
95 return new storage.Storage(client, context.applicationID); 95 return new storage.Storage(client, context.applicationID);
96 }); 96 });
97 } 97 }
98 } 98 }
99 99
100 var context = getDockerContext(); 100 if (_contextRegistry != null) {
101 var rpcService = initializeRPC(); 101 return new Future.value(_contextRegistry);
102 } else {
103 var context = getDockerContext();
104 var rpcService = initializeRPC();
102 105
103 return getStorage(context).then((storage) { 106 return getStorage(context).then((storage) {
104 return new ContextRegistry(rpcService, storage, context); 107 _contextRegistry = new ContextRegistry(rpcService, storage, context);
105 }); 108 return _contextRegistry;
109 });
110 }
106 } 111 }
107 112
108 void initializeContext(Services services) { 113 void initializeContext(Services services) {
109 db.registerDbService(services.db); 114 db.registerDbService(services.db);
110 datastore.registerDatastoreService(services.db.datastore); 115 datastore.registerDatastoreService(services.db.datastore);
111 storage.registerStorageService(services.storage); 116 storage.registerStorageService(services.storage);
112 logging.registerLoggingService(services.logging); 117 logging.registerLoggingService(services.logging);
113 modules.registerModulesService(services.modules); 118 modules.registerModulesService(services.modules);
114 memcache.registerMemcacheService(services.memcache); 119 memcache.registerMemcacheService(services.memcache);
115 120
116 if (_authClient != null) { 121 if (_authClient != null) {
117 gcloud_http.registerAuthClientService(_authClient); 122 gcloud_http.registerAuthClientService(_authClient);
118 123
119 // This will automatically close the authenticated HTTP client when the 124 // This will automatically close the authenticated HTTP client when the
120 // HTTP server shuts down. 125 // HTTP server shuts down.
121 ss.registerScopeExitCallback(() => _authClient.close()); 126 ss.registerScopeExitCallback(() => _authClient.close());
122 } 127 }
123 } 128 }
124 129
125 void initializeRequestSpecificServices(Services services) { 130 void initializeRequestSpecificServices(Services services) {
126 logging.registerLoggingService(services.logging); 131 logging.registerLoggingService(services.logging);
127 users.registerUserService(services.users); 132 users.registerUserService(services.users);
128 } 133 }
129 134
135 Future withAppEngineServices(Future callback()) {
136 return initializeAppEngine().then((ContextRegistry contextRegistry) {
137 return ss.fork(() {
138 var backgroundServices = _contextRegistry.newBackgroundServices();
139 initializeContext(backgroundServices);
140 return callback();
141 });
142 });
143 }
144
130 Future runAppEngine(void handler(request, context), void onError(e, s)) { 145 Future runAppEngine(void handler(request, context), void onError(e, s)) {
131 return initializeAppEngine().then((ContextRegistry contextRegistry) { 146 return initializeAppEngine().then((ContextRegistry contextRegistry) {
wibling 2014/12/03 11:11:03 Why call initializeAppEngine here? Isn't it enou
kustermann 2014/12/03 11:14:42 Sure. Forgot to remove that wrapper. Done
132 _contextRegistry = contextRegistry; 147 return withAppEngineServices(() {
133 var appengineServer = new AppEngineHttpServer(_contextRegistry); 148 var appengineServer = new AppEngineHttpServer(_contextRegistry);
134 var backgroundServices = _contextRegistry.newBackgroundServices();
135
136 ss.fork(() {
137 initializeContext(backgroundServices);
138 appengineServer.run((request, context) { 149 appengineServer.run((request, context) {
139 ss.fork(() { 150 ss.fork(() {
140 initializeRequestSpecificServices(context.services); 151 initializeRequestSpecificServices(context.services);
141 handler(request, context); 152 handler(request, context);
142 return request.response.done; 153 return request.response.done;
143 }, onError: (error, stack) { 154 }, onError: (error, stack) {
144 var context = _contextRegistry.lookup(request); 155 var context = _contextRegistry.lookup(request);
145 if (context != null) { 156 if (context != null) {
146 try { 157 try {
147 context.services.logging.error( 158 context.services.logging.error(
(...skipping 15 matching lines...) Expand all
163 } on StateError catch (_) {} 174 } on StateError catch (_) {}
164 request.response.close().catchError((closeError, closeErrorStack) { 175 request.response.close().catchError((closeError, closeErrorStack) {
165 onError('Forcefully closing response, due to error in request ' 176 onError('Forcefully closing response, due to error in request '
166 'handler zone, resulted in an error: $closeError', 177 'handler zone, resulted in an error: $closeError',
167 closeErrorStack); 178 closeErrorStack);
168 }); 179 });
169 }); 180 });
170 }); 181 });
171 return appengineServer.done; 182 return appengineServer.done;
172 }); 183 });
173
174 return new Future.value();
175 }); 184 });
176 } 185 }
OLDNEW
« lib/appengine.dart ('K') | « lib/appengine.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698