一、Connecting连接
sgs客户端第一件要做的事情就是与服务器建立连接。 连接的步骤有以下:
1、 创建一个SimpleClient实例
你需要做的第一件事情就是实例化一个SimpleClient.SimpleClient 的构造器需要一个参数:一个 SimpleClientListener ,用于调用通信的事件。在一般基础的客户端程序中,这就相当于一个主类,它的代码的大体看起来如下所示:
public
class
Client
extends
EventDispatcher
implements
SimpleClientListener
{
//....
client=new SimpleClient(this);
}
2、Create the login properties.创建一个登陆的属性。
SimpleClient 登陆的方法需要一个参数即可,一个( 属性 ) 对象。在AS3中这个对象由Object构造,这个 SimpleClient的实例设置了两个属性:主机和端口。下面的例子演示了如何设置这些属性:
var connectProps:Object
=
new
Object();
connectProps[ClientConnector.HOST]
=
host;
connectProps[ClientConnector.PORT]
=
port;
3、Call the login method.调用登陆方法
this
.client.login(connectProps);
4、发送验证消息
为了响应你的登陆请求, API 将调用用 getPasswordAuthentication ( 获取密码验证 ) 来响应你的SimpleClientListener ( 简单客户端的监听器 ) 的用户名和密码的登陆请求。 “ Password ” 在这里是一种常见的验证信息的形式,该验证服务返回给 API( 即客户端 API) 一个二进制的数组 。
得到什么信息,和你服务器安装的验证程序有关。默认的验证信息是返回密码的完整信息,允许任何人登陆。 PDS 环境也通过验证服务器返回一个 hash 字符串。可以复写其他的验 证者来支持用户特定的验证服务。
代码
private
var _user:PasswordAuthentication;
public
function get passwordAuthentication():PasswordAuthentication
{
return
this
._user;
}
public
function set passwordAuthentication(pauth:PasswordAuthentication):
void
{
this
._user
=
pauth;
}
在上面这些步骤中, API 会登陆到服务器。如果登陆成功,将会由 SimpleClientListener 返回返回登陆信息。 SimpleClientListener负责登录的事件处理
代码
public
function loggedIn():
void
{
trace(
"
客户端登录成功
"
);
dispatchEvent(
new
SGSEvent(SGSEvent.LOGIN_SUCCESS));
}
public
function loginFailed(reason:String):
void
{
trace(
"
客户端登录失败
"
);
dispatchEvent(
new
SGSEvent(SGSEvent.LOGIN_FAILED));
}
public
function exceptionThrown(err:String):
void
{
trace(
"
连接出错了
"
);
dispatchEvent(
new
ExecptionEvent(err));
}
public
function joinedChannel(channel:ClientChannel):ClientChannelListener
{
return
null
;
}
//
接收客户端的数据
public
function receivedClientMessage(message:BeyondoByteArray):
void
{
var str:String
=
message.readSgsString();
dispatchEvent(
new
TestMessageEvent(TestMessageEvent.MESSAGEEVENT,str));
}
//
从新连接
public
function reconnecting():
void
{
}
public
function reconnected():
void
{
}
public
function disconnected(graceful:Boolean, reason:String):
void
{
trace(
"
断开连接
"
);
dispatchEvent(
new
SGSEvent(SGSEvent.DISCONNECTED));
}
到此,客户端就连接上了服务器,可以开始和服务器进行通信了。若登 陆失败,登陆失败将会把登陆失败的原因返回,来替代传递一个登陆的字符串信息。
二、Client/Server Communicatio客户端 / 服务器的通信
一旦我们和服务器建立了连接,我们就可以和服务器进行通信了。在 sgs环境中有两种通信形式:客户端 / 服务器通信模式和订阅 / 发布通道的通信模式。我们的第一个例子使用客户端 / 服务器模式,该模式是这两者之中最简单的。
在 PDS 环境中所有的通信都是通过发送和接收标准的二进制格式来完成的。对于 Java 程 序员来说将会看到一些较早形式的通信方式。然而, PDS 环境是一个客户端透明的系统。 PD S的目标是将 J2SE,J2ME, 和 C/C++ 等客户端的 API 接口统一起来。其他平台也可以和 PDS 进行通信,这些会作为后面的开发目标。
当一些通用语言对象在系统存在时,他们不属于特定的平台,或者是比较复杂,带一些多 余的功能。对于 PDS 的开发团队来说,最好的解决办法就是提供一个通用的、高效的基于发送和接收二进制数据的形式来解决该问题,让特定的应用建立在此基础之上,按他们自己 的需要。 向服务器发送一个数据包,我们所要做的就是将数据包以二进制的形式传递到 SimpleClient对象发送的方法中。
//
发送数据
public
function send(message:String):
void
{
var buf:BeyondoByteArray
=
new
BeyondoByteArray();
buf.writeUTF(message);
this
._client.send(buf);
}
当服务器发送一个数据包返回给客户端时,它是通过 SimpleClientListener 监听器将接收的信息返回的。
代码
//
接收客户端的数据
public
function receivedClientMessage(message:BeyondoByteArray):
void
{
var str:String
=
message.readSgsString();
dispatchEvent(
new
TestMessageEvent(TestMessageEvent.MESSAGEEVENT,str));
}
完整的代码详见: