Christian Schalk gave a presentation on building games for the cloud using PlayN and Google cloud technologies. He began with an overview of PlayN, a cross-platform game development framework. He then reviewed Google App Engine and Google Cloud Storage as options for deploying and storing game data in the cloud. The presentation concluded with demonstrations of getting started with PlayN, deploying a game to App Engine, and setting up remote procedure calls between the client and server.
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Building Kick Ass Video Games for the Cloud
1. Christian Schalk
Google Developer Advocate
How to Build Kick Ass Games for the
Cloud
GDC Online 2011
Austin, Texas - October 10, 2011
2. About the Speaker
Christian Schalk
Day Job
● Developer Advocate for Google's Cloud Technology
○ App Engine, Google Storage, Prediction API, BigQuery ...
● Mostly Server-Side Java Background
○ "JavaServer Faces: The Complete Reference" Co-Author
● Haven't developed video games since the
Commodore-64!
Yes, I'm old school ;-)
3. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
5. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
6. Reviewing PlayN!
Formerly known as "ForPlay"
● An API for building cross-platform games
● Core game code can be platform agnostic
● Develop games in Java
○ Familiar language/toolset
● Leverages Google Web Toolkit
○ Compiles to JS/HTML5, (among other platforms)
● Free and Open Source (alpha)
○ http://code.google.com/p/playn
7. Introducing PlayN!
A GWT abstraction layer for games
PlayN API
Implementations for Java, HTML5(GWT/JS), Android, Flash
8. Components of PlayN!
Implements core.Game PlayN.*
Fully generic gaming components. Core game logic is fully platform
independent!
9. PlayN Cross Platform Magic
● Game uses core PlayN abstractions, is unaware of which
platform is running
● The only platform-specific code is in the entry point for
each platform:
PlayN.run(new MyGame()); PlayN.run(new MyGame());
10. Other PlayN Benefits
● Built-in physics engine based on proven OpenSource
technologies
● Box2D
○ C++ 2D Physics engine by Erin Catto
● JBox2D
○ A port of Box2D from C++ to Java
● GWTBox2D
○ A port of JBox2D from Java to JavaScript
11. Benefits of GWT Abstraction
● GWT Compiler optimizes code for size
○ Removes unused code
○ Evaluates when possible at compile time
○ Inlines functions
○ Heavily obfuscated result code
● Smaller compiled code - faster load time
● Optimized caching, avoids unnecessary network IO
12. Benefits of HTML5 for Games
● New HTML elements
○ 2D canvas
○ Audio, Video
● Application Cache
● 3D Canvas (WebGL)
○ Open GL ES 2.0 made JavaScript friendly
● CSS3
○ Supports hardware accelerated transforms
13. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
15. Introducing App Engine
Build and run your web apps on Google’s Cloud Infrastructure
● Easy to build
● Easy to maintain
● Easy to scale
Focus on building your app, let us wear the pagers!
16. Cloud Development in a Box
● Development SDK
● Local development tools
○ DevServer, admin
○ Eclipse plugin
● Language runtimes
● Specialized API services
● Cloud-based dashboard
● Automatic scaling
○ Built-in fault tolerance
○ Automated load balancing
● Continuously evolving...
25. What Is Google Storage?
● Store your data in Google's cloud
○ any format, any amount, any time
● You control access to your data
○ private, shared, or public
● Access via Google APIs or 3rd party tools/libraries
26. Sample Use Cases
Static content hosting
e.g. static html, images, music, video
Backup and recovery
e.g. personal data, business records
Sharing
e.g. share data with your customers
Data storage for applications
e.g. used as storage backend for Android, AppEngine, Cloud
based apps
Storage for Computation
e.g. BigQuery, Prediction API
27. Google Storage Benefits
High Performance and Scalability
Backed by Google infrastructure
Strong Security and Privacy
Control access to your data
Easy to Use
Get started fast with Google & 3rd party tools
28. Google Storage Technical Details
● RESTful API
○ Verbs: GET, PUT, POST, HEAD, DELETE
○ Resources: identified by URI
○ Compatible with S3
● Buckets
○ Flat containers
● Objects
○ Any type
○ Size: 100 GB / object
● Access Control for Google Accounts
○ For individuals and groups
● Two Ways to Authenticate Requests
○ Sign request using access keys
○ Web browser login
31. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
32. Requirements for getting started with PlayN
● Clone a copy of PlayN
○ git clone https://code.google.com/p/playn
● Core Requirements
○ Java 6 SDK
○ Apache Ant
○ Maven
○ App Engine SDK
○ Android SDK
● Requirements with Eclipse
○ Eclipse IDE Indigo 3.7 (Or earlier version w/ Maven)
○ Google Plugin for Eclipse
○ Android Plugin for Eclipse
33. Building/Installing PlayN
● After you've cloned a copy of PlayN
○ git clone https://code.google.com/p/playn
● And satisfied the core requirements, you can install via:
○ cd playn (directory where your copy is location)
○ mvn install (or 'ant install')
● Running 'showcase' sample app with Mvn
○ cd playn/sample/showcase/core
○ mvn compile exec:java
● Running 'showcase' sample app with Ant
○ cd playn/sample/showcase
○ ant run-java
34. Demo: How to get started w/ PlayN
http://code.google.com/p/playn
35. Building a new project in PlayN
● From the command line:
○ mvn archetype:generate -DarchetypeGroupId=com.googlecode.playn
-DarchetypeArtifactId=playn-archetype
○ ...
● From Eclipse
○ Select File → New → Other..., then select Maven →
Maven Project in the dialog that pops up, then click
Next.
■ Click Next again unless you wish to specify a custom workspace location.
■ Check Include snapshot archetypes in the dialog and then double click
on the playn-archetype in the list of archetypes
○ ...
37. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
38. Deploy your HTML project to the Cloud
● For Google App Engine Deployment, you can easily
convert the project to an App Engine Project
39. Deploy your HTML project to the Cloud
● After converting your HTML project to an App Engine
project you will have to do...
● Add a 'WEB-INF/lib/appengine-web.xml' file
○ Note: Click 'Quick Fix' in the Errors console of
Eclipse
● Before deployment make sure your 'WEB-INF/lib' has
the necessary runtime App Engine jar files.
40. Agenda
● PlayN Recap
● Google Cloud Tech Review
○ App Engine
○ Google Storage
○ ...
● Hands on with PlayN - Getting Started
● Deploying your game to the cloud
● Setting up an RPC mechanism
41. Setting up an RPC mechanism
● Building Your Server
○ PlayN comes with a preliminary Server example
code that uses Jetty
■ Is not needed if deploying to App Engine
■ Instead, you can implement your own server by
adding an HttpServlet to your project
■ Have it implement the doPost() method
■ Can map it to url: '/rpc' in web.xml
● Building your client code
○ If Cloud is your main deployment, you can use
GWT's RequestBuilder
■ You can build your HTTP Post to send data to
your server
42. Setting up an RPC mechanism
● Example: A client method to persist a score
private void submitScore(int score) {
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/rpc");
rb.setHeader("Content-Type", "application/x-www-form-urlencoded");
try {
rb.sendRequest("score="+score, new RequestCallback() {
public void onError(Request request, Throwable exception) {
requestFailed(exception);
}
public void onResponseReceived(Request request, Response response) {
log.info("Score sent and response received.");
}
});
} catch (RequestException ex) {
requestFailed(ex);
}
}
43. Setting up an RPC mechanism
● Example: Server method to persist score sent from
client
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
resp.setContentType("text/plain");
User user = UserServiceFactory.getUserService().getCurrentUser();
String id = null;
if (user == null){
id = "Anonymous";
} else {
id = user.getNickname();
}
String score = req.getParameter("score");
if (score != null){
persistScore(score, id);
}
}
private void persistScore(String score, String userid) {...}
44. New! Using the RPCService Wizard
(As of version 2.4 of the Google Plugin for Eclipse)
Select the project containing any Persistent classes, and then...
File > New > Other > Google > RPC Service
Generates CRUD stub code for all persistent classes
45. Demo: Introducing 'Cloud Warrior'
App Engine Google Storage
Datastore
Game Assets
(images/sounds)
Game Scores
Profile Data
Game Play
(PlayN)
46. PlayN Summary
● Open source, cross-platform game abstraction layer
○ Core game logic is platform agnostic
● ForPlay abstracts away the core components of a game
○ The game loop, I/O system, and asset management
● Write in familiar Java, get performance on multiple
platforms
○ Superior Java development/debug
○ GWT allows compilation to fast JavaScript/HTML5
● Your assignment:
○ Download PlayN and build a game!
○ http://code.google.com/p/playn/
47. Announcements!
Announcing the New PlayN Developer Site!
http://developers.google.com/playn/