जावा और Android प्लेटफार्मों पर GWT RPC के लिए, मैं वर्तमान में gwt-syncproxy का उपयोग कर GWT RPC तरीकों के जावा ग्राहक पहुँच प्रदान करने के साथ प्रयोग कर रहा हूँ, और मैं पर Guice, जिन, और RoboGuice उपयोग कर रहा हूँ तत्काल गेम ऑब्जेक्ट के लिए उचित एसिंक्रोनस सेवा उदाहरणों को इंजेक्ट करने के लिए उनके संबंधित लक्ष्य प्लेटफ़ॉर्म।
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
तो मैं किसी भी क्षेत्र के लिए @Inject एनोटेशन जोड़ने:
एक PlayN परियोजना के लिए कोर/pom.xml में, मैं निम्नलिखित निर्भरता के रूप में की जरूरत डि जिन/Guice/RoboGuice से समर्थन करने के लिए निर्देशांक शामिल ठोस खेल कार्यान्वयन के अंदर:
public class TestGame implements Game {
@Inject
TestServiceAsync _testService;
...
}
html/pom.xml में, मैं शामिल निर्भरता जिन के लिए निर्देशांक:
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>1.5.0</version>
</dependency>
और मैं TestGameGinjector और TestGameModule कक्षाएं बनाने:
TestGameGinjector.java
@GinModules(TestGameModule.class)
public interface TestGameGinjector extends Ginjector {
TestGame getGame();
}
TestGameModule.java
public class TestGameModule extends AbstractGinModule {
@Override
protected void configure() {
}
}
इस समय के बाद से, मैं केवल इंजेक्शन लगाने कर रहा हूँ TestServiceAsync इंटरफ़ेस, मुझे TestGameModule.configure() विधि में कोई कार्यान्वयन करने की आवश्यकता नहीं है; जीन GWT.create() के माध्यम से मेरे लिए AsyncServices के तत्काल प्रबंधन का प्रबंधन करता है।
मैं तो TestGame.gwt.xml
<inherits name='com.google.gwt.inject.Inject'/>
के लिए निम्न और अंत में, मैं TestGameHtml में निम्न परिवर्तन किए गयी।जावा
public class TestGameHtml extends HtmlGame {
private final TestGameGinjector _injector = GWT.create(TestGameGinjector.class);
@Override
public void start() {
HtmlPlatform platform = HtmlPlatform.register();
platform.assetManager().setPathPrefix("test/");
PlayN.run(_injector.getGame());
}
}
और यह बहुत अधिक PlayN के लिए HTML5 प्लेटफ़ॉर्म को कवर करता है।
जावा मंच के लिए, मैं निम्नलिखित निर्भरता जावा/pom.xml करने के लिए निर्देशांक जोड़ें:
<dependency>
<groupId>com.gdevelop.gwt.syncrpc</groupId>
<artifactId>gwt-syncproxy</artifactId>
<version>0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0-rc2</version>
</dependency>
ध्यान दें कि Google Code पर gwt-syncproxy परियोजना एक pom.xml शामिल नहीं है। मेरे पास mwized- gwt-syncproxy फोर्कड का संस्करण है और https://bitbucket.org/hatboyzero/gwt-syncproxy.git पर गिट के माध्यम से उपलब्ध है। आपको इसे क्लोन करने में सक्षम होना चाहिए, एमवीएन क्लीन पैकेज को अपने स्थानीय मैवेन रिपोजिटरी में लाने के लिए चलाएं।
फिर भी, मैं जावा मंच के लिए एक TestGameModule.java इस प्रकार बनाया:
public class TestGameModule extends AbstractModule {
@Override
protected void configure() {
bind(TestServiceAsync.class).toProvider(TestServiceProvider.class);
}
public static class TestServiceProvider implements Provider<TestServiceAsync> {
public TestServiceAsync get() {
return (TestServiceAsync) SyncProxy.newProxyInstance(
TestServiceAsync.class,
Deployment.gwtWebPath(), // URL to webapp -- http://127.0.0.1:8888/testgame
"test"
);
}
}
}
और मैं TestGameJava.java संशोधित इस प्रकार है:
public class TestGameJava {
public static void main(String[] args) {
Injector _injector = Guice.createInjector(new TestGameModule());
JavaPlatform platform = JavaPlatform.register();
platform.assetManager().setPathPrefix("test/images");
PlayN.run(_injector.getInstance(TestGame.class));
}
}
मैं के साथ एक समान व्यायाम के माध्यम से चला गया एंड्रॉइड प्लेटफॉर्म और रोबोगुइस - जबरदस्त विस्तार के बिना, प्रासंगिक परिवर्तन/स्निपेट निम्नानुसार हैं:
pom.xml d ependencies
<dependency>
<groupId>com.gdevelop.gwt.syncrpc</groupId>
<artifactId>gwt-syncproxy</artifactId>
<version>0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.roboguice</groupId>
<artifactId>roboguice</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0-rc2</version>
<classifier>no_aop</classifier>
</dependency>
TestGameApplication.java
public class TestGameApplication extends RoboApplication {
@Override
protected void addApplicationModules(List<Module> modules) {
modules.add(new TestGameModule());
}
}
TestGameModule.java
public class TestGameModule extends AbstractModule {
@Override
protected void configure() {
bind(TestServiceAsync.class).toProvider(TestServiceProvider.class);
}
public static class TestServiceProvider implements Provider<TestServiceAsync> {
public TestServiceAsync get() {
return (TestServiceAsync) SyncProxy.newProxyInstance(
TestServiceAsync.class,
Deployment.gwtWebPath(), // URL to webapp -- http://127.0.0.1:8888/testgame
"test"
);
}
}
}
TestGameActivity.java
public class TestGameActivity extends GameActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
final Injector injector = ((RoboApplication) getApplication()).getInjector();
injector.injectMembers(this);
super.onCreate(savedInstanceState);
}
@Override
public void main(){
platform().assetManager().setPathPrefix("test/images");
final Injector injector = ((RoboApplication) getApplication()).getInjector();
PlayN.run(injector.getInstance(TestGame.class));
}
}
यह मेरे प्रोजेक्ट में काम करने वाले जीन/गुइस/रोबोगुइस + जीडब्ल्यूटी के बारे में एक त्वरित और गंदा रैंड डाउन है, और मैंने सत्यापित किया है कि यह जावा और एचटीएमएल प्लेटफॉर्म दोनों पर खूबसूरती से काम करता है।
वैसे भी, कई प्लेएन प्लेटफॉर्म पर आरपीसी कॉल प्रदान करने के लिए जीडब्ल्यूटी दृष्टिकोण है :)।
कोई पूरा उत्तर नहीं है, लेकिन थोड़ा सा: जावा जेसन के साथ अच्छा काम करता है, लेकिन सभी अच्छे जेसन लिब प्लेन के तहत टूटे हुए हैं। मैंने अभी एक सवाल पोस्ट किया है, क्योंकि हम जर्सी और ईई स्टैक से कुछ अन्य सामान का उपयोग कर एक स्टेटलेस आरईएसटी आवेदन के रूप में हमारे सर्वर का निर्माण कर रहे हैं। http://stackoverflow.com/questions/9045455/how-do-i-convert-a-pojo-to-json-in-playn यह हमें डीटीओ साझा करने के लिए प्रेरित करता है और टाइपएफ़ कॉलबैक करता है और आपके जीडब्ल्यूटी विधि का उपयोग कर सकता है जावा बिल्ड को तोड़ें, और फिर आप बस जीडब्ल्यूटी पर चिपके रहें और इसके लिए कुछ कैनवास ढांचे का उपयोग कर सकें। – iuiz