简体   繁体   中英

How to access a protobuf service from actionscript-3?

I have a simple Google Protocol Buffers server running in Java, and my friend needs to access it from his actionscript 3 application. We found it easy to generate classes from *.proto with:

protoc --plugin=protoc-gen-as3=protoc-gen-as3.bat --as3_oututput my.proto

but we're quite dumbfounded as to actual configuration (setting server address and port), obtaining the communication channel and actually calling the service defined in *.proto.

In Java it's quite easy with a help of DuplexTcpClientBootstrap , but what of actionscript? I tried googling, but everything I can find is only related to generating classes from *.proto , with no examples of actual methods/functions being called.

TIA, I'll be grateful for any link or example!

With "pafau k" we have Java server - it use protobuf - but it's write to sockets. I think we have some misunderstanding because flex works probably on "http" protocol - am i right?

var callService:CallcenterService = new CallcenterService();
var simpleWebRPC:SimpleWebRPC = new SimpleWebRPC("0.0.0.0:1234/");
callService.sendFunction = xmlsock.send;
callService.getDefaults(new EmptyMessage(), function(result:*):void {
  var response:Defaults = result as Defaults;
  if (response){
    trace("RPC call succeeded:", response);
  }
  else{
     trace("RPC call failed:", ErrorEvent(result).text);
  }
});

callService is generated from proto

message EmptyMessage {}
message Defaults {
    required string xmlContents = 1;
}
service CallcenterService {
    rpc getDefaults (EmptyMessage) returns (Defaults);
}

This is error from java server:

 com.googlecode.protobuf.pro.duplex.handler.ServerConnectRequestHandler exceptionCaught
WARNING: Exception caught during RPC connection handshake.
com.google.protobuf.InvalidProtocolBufferException: Protocol message tag had invalid wire type.
        at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:78)
        at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
        at com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:438)
        at com.googlecode.protobuf.pro.duplex.wire.DuplexProtocol$WirePayload$Builder.mergeFrom(DuplexProtocol.java:2565)
        at com.googlecode.protobuf.pro.duplex.wire.DuplexProtocol$WirePayload$Builder.mergeFrom(DuplexProtocol.java:2450)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:300)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:238)
        at com.google.protobuf.AbstractMessageLite$Builder.mergeFrom(AbstractMessageLite.java:202)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:738)
        at com.google.protobuf.AbstractMessage$Builder.mergeFrom(AbstractMessage.java:238)
        at org.jboss.netty.handler.codec.protobuf.ProtobufDecoder.decode(ProtobufDecoder.java:101)
        at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:72)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
        at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
        at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281)
        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201)
        at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM