现在使用 PubNub 时遇到问题(java 对象)
Trouble using PubNub's herenow (java object)
我已将 Pubnub-4.0.0.jar 文件包含到我的 webroot 中。
(Pubnub-4.0.0.jar可以在这里下载:https://www.pubnub.com/docs/java/pubnub-java-sdk-v4)
我正在尝试将“现在这里”java 代码添加到我的 coldfusion 项目中,但在这样做时遇到了一些麻烦。
java代码如下:
PNConfiguration pnConfiguration = new PNConfiguration();
pnConfiguration.setSubscribeKey("SubscribeKey")
PubNub pubnub = new PubNub(pnConfiguration);
pubNub.hereNow()
.channels(Arrays.asList("ch1", "ch2", "ch3")) // who is present on those channels?
.includeState(true) // include state with request (false by default)
.includeUUIDs(true) // if false, only shows occupancy count
.async(new PNCallback<PNHereNowResult>() {
@Override
public void onResponse(PNHereNowResult result, PNStatus status) {
}
});
我对应的Coldfusion代码如下:
<cfobject type="java" class="com.pubnub.api.PNConfiguration" name="objPNConfiguration" >
<cfset PNConfiguration = objPNConfiguration.init() >
<cfset PNConfiguration.setSubscribeKey("SubscribeKey") >
<cfobject type="java" class="com.pubnub.api.PubNub" name="objPubNub" >
<cfset pubnub = objPubNub.init(PNConfiguration) >
<cfset tmp = pubnub.hereNow({channels: "5A4B3B59-FA6A-F22A-404F18EFA8112508"}) >
<cfdump var="#tmp#" >
我没有收到任何返回的错误。
我觉得我调用“hereNow”方法的方式不正确,或者我尝试显示结果的方式不正确。
任何人都可以就此提供任何帮助吗?
谢谢
看起来channels
是方法名,不是结构体。 includeState
和 includeUUIDs
也是如此。将它们作为链式方法调用,并传入预期的参数。
channels()
需要一个 CF 数组(即 java.util.List 对象)。
includeState
和 includeUUIDs
需要一个简单的布尔值。
像这样的东西应该适用于前三 (3) 种方法:
<cfscript>
config = createObject("java", "com.pubnub.api.PNConfiguration").init();
config.setSubscribeKey( "SubscribeKey" );
pubNub = createObject("java", "com.pubnub.api.PubNub").init( config );
pubNub.hereNow()
.channels( ["ch1", "ch2", "ch3"] )
.includeState( true )
.includeUUIDs( true )
.asynch(
....
) ;
</cfscript>
.async()
方法有点不同,因为它需要某种类型的回调对象。不幸的是,它看起来像所有 callback classes are abstract
. (I am not sure why. None of the callback classes contain an implementation, so they function more like an interface
。)可悲的是,CF 中没有 abstract
classes 的等价物。
抽象classes不能实例化,也不能与酷Dynamic Proxy Feature in CF10+. The dynamic proxy is a slick feature which allows you to substitute a CFC, for a custom java class. However, it is only supported for interfaces
一起使用。由于 PNCallback
不是接口,因此确实无法避免编写扩展 PNCallback
的自定义 java class。
package your.package.name;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.presence.PNHereNowResult ;
public class YourCallbackClass extends PNCallback<PNHereNowResult> {
public void onResponse(PNHereNowResult result, PNStatus status) {
// do something with the result and status here
}
}
编译后,将其添加到CFclass路径。然后您可以在 CF 中创建自定义 class 的实例并将其传递给 asynch() 方法:
</cfscript>
// .....
yourCallback = createObject("java", "your.package.name.YourCallbackClass").init();
pubNub.hereNow()
.channels( ["ch1", "ch2", "ch3"] )
.includeState( true )
.includeUUIDs( true )
.asynch( yourCallback );
</cfscript>
Pubnub 为此提供了一个 REST API 调用。 https://s3.amazonaws.com/pubnub/sdk/RESTful+Documentation/index.html#presence-here-now-get
谢谢 Pubnub。
我已将 Pubnub-4.0.0.jar 文件包含到我的 webroot 中。 (Pubnub-4.0.0.jar可以在这里下载:https://www.pubnub.com/docs/java/pubnub-java-sdk-v4)
我正在尝试将“现在这里”java 代码添加到我的 coldfusion 项目中,但在这样做时遇到了一些麻烦。
java代码如下:
PNConfiguration pnConfiguration = new PNConfiguration();
pnConfiguration.setSubscribeKey("SubscribeKey")
PubNub pubnub = new PubNub(pnConfiguration);
pubNub.hereNow()
.channels(Arrays.asList("ch1", "ch2", "ch3")) // who is present on those channels?
.includeState(true) // include state with request (false by default)
.includeUUIDs(true) // if false, only shows occupancy count
.async(new PNCallback<PNHereNowResult>() {
@Override
public void onResponse(PNHereNowResult result, PNStatus status) {
}
});
我对应的Coldfusion代码如下:
<cfobject type="java" class="com.pubnub.api.PNConfiguration" name="objPNConfiguration" >
<cfset PNConfiguration = objPNConfiguration.init() >
<cfset PNConfiguration.setSubscribeKey("SubscribeKey") >
<cfobject type="java" class="com.pubnub.api.PubNub" name="objPubNub" >
<cfset pubnub = objPubNub.init(PNConfiguration) >
<cfset tmp = pubnub.hereNow({channels: "5A4B3B59-FA6A-F22A-404F18EFA8112508"}) >
<cfdump var="#tmp#" >
我没有收到任何返回的错误。 我觉得我调用“hereNow”方法的方式不正确,或者我尝试显示结果的方式不正确。
任何人都可以就此提供任何帮助吗? 谢谢
看起来channels
是方法名,不是结构体。 includeState
和 includeUUIDs
也是如此。将它们作为链式方法调用,并传入预期的参数。
channels()
需要一个 CF 数组(即 java.util.List 对象)。includeState
和includeUUIDs
需要一个简单的布尔值。
像这样的东西应该适用于前三 (3) 种方法:
<cfscript>
config = createObject("java", "com.pubnub.api.PNConfiguration").init();
config.setSubscribeKey( "SubscribeKey" );
pubNub = createObject("java", "com.pubnub.api.PubNub").init( config );
pubNub.hereNow()
.channels( ["ch1", "ch2", "ch3"] )
.includeState( true )
.includeUUIDs( true )
.asynch(
....
) ;
</cfscript>
.async()
方法有点不同,因为它需要某种类型的回调对象。不幸的是,它看起来像所有 callback classes are abstract
. (I am not sure why. None of the callback classes contain an implementation, so they function more like an interface
。)可悲的是,CF 中没有 abstract
classes 的等价物。
抽象classes不能实例化,也不能与酷Dynamic Proxy Feature in CF10+. The dynamic proxy is a slick feature which allows you to substitute a CFC, for a custom java class. However, it is only supported for interfaces
一起使用。由于 PNCallback
不是接口,因此确实无法避免编写扩展 PNCallback
的自定义 java class。
package your.package.name;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.presence.PNHereNowResult ;
public class YourCallbackClass extends PNCallback<PNHereNowResult> {
public void onResponse(PNHereNowResult result, PNStatus status) {
// do something with the result and status here
}
}
编译后,将其添加到CFclass路径。然后您可以在 CF 中创建自定义 class 的实例并将其传递给 asynch() 方法:
</cfscript>
// .....
yourCallback = createObject("java", "your.package.name.YourCallbackClass").init();
pubNub.hereNow()
.channels( ["ch1", "ch2", "ch3"] )
.includeState( true )
.includeUUIDs( true )
.asynch( yourCallback );
</cfscript>
Pubnub 为此提供了一个 REST API 调用。 https://s3.amazonaws.com/pubnub/sdk/RESTful+Documentation/index.html#presence-here-now-get 谢谢 Pubnub。