Java 및 Android 플랫폼의 GWT RPC의 경우 GWT RPC 메소드에 Java 클라이언트 액세스를 제공하기 위해 gwt-syncproxy를 사용하고 있으며 Guice, Gin 및 RoboGuice를 사용하고 있습니다. 이들 각각의 타겟 플랫폼은 인스턴스화 된 Game 객체에 대한 적절한 비동기 서비스 인스턴스를 주입한다.
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
그럼 내가 어떤 분야에 @Inject 주석을 추가하십시오 PlayN 프로젝트의 핵심/pom.xml 파일에서
, 나는 다음과 같은 의존성이 필요에 따라 진/Guice/RoboGuice에서 DI를 지원하기 위해 좌표 포함 콘크리트 게임 구현의 내부 :
<dependency>
<groupId>com.google.gwt.inject</groupId>
<artifactId>gin</artifactId>
<version>1.5.0</version>
</dependency>
:
public class TestGame implements Game {
@Inject
TestServiceAsync _testService;
...
}
html로/pom.xml 파일에서, 나는 의존성이 진 좌표를 포함 0
내가 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() 메소드에 구현할 필요가 없습니다. Gin은 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>
구글 코드에서 GWT-syncproxy 프로젝트가 pom.xml 파일을 포함하지 않습니다 마십시오. gwt-syncproxy의 은 버전으로 fork되고 git을 통해 https://bitbucket.org/hatboyzero/gwt-syncproxy.git에 있습니다. 복제 할 수 있어야합니다. mvn 클린 패키지 설치을 실행하여 로컬 Maven 저장소로 가져와야합니다.
어쨌든, 다음과 같이 나는 자바 플랫폼을위한 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));
}
}
내가와 유사한 운동을 통해 갔다 Android 플랫폼 및 RoboGuice - 세부적인 내용은 없지만 관련 변경 사항/스 니펫은 다음과 같습니다.
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
012,351
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));
}
}
내 프로젝트에서 Gin/Guice/RoboGuice + GWT를 사용하는 방법에 대해 빠르고 간단하게 요약 할 수 있습니다. Java 및 HTML 플랫폼 모두에서 아름답게 작동한다는 것을 확인했습니다.
어쨌든, 여러 PlayN 플랫폼에 RPC 호출을 제공하는 GWT 접근법이 있습니다. :)
완전한 대답은 아니지만 약간 : Java는 Json과 잘 작동하지만 모든 좋은 Json 라이브러리는 PlayN에서 깨졌습니다. Jersey와 EE 스택의 다른 것들을 사용하여 Stateless REST 어플리케이션으로 서버를 구축하기 때문에 오늘 질문을 올렸습니다. http://stackoverflow.com/questions/9045455/how-do-i-convert-a-pojo-to-json-in-playn 이렇게하면 DTO를 공유하고 형식이 안전한 콜백 및 캐스트를 사용할 수 있습니다. GWT 메소드 사용 Java 빌드를 깨뜨린 다음 GWT에 충실하고 일부 캔버스 프레임 워크를 사용할 수 있습니다. – iuiz