Sun公司开源游戏服务器Project Darkstar Server(SGS)-----AS3客户端技术详解(一)

一、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));
            
        }
        

 完整的代码详见:

Sun公司开源游戏服务器Project Darkstar Server(SGS)-----AS3客户端


你可能感兴趣的:(project)