`
suiyuan0808
  • 浏览: 154438 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我写的网页游戏框架openjpfgame AMF-PHP通讯部分

阅读更多

     最近工作游戏项目比较忙,目前openjpfgame 断断续续开发当中,各个部分之间通讯Flex<--->Java,Flex<--->Php,Php<--->Java都已经开发好。初步确定做一MMORPG游戏Demo版本。

     目前Flex<--->Php通讯方式采用Flash自带的RemoteObject,而经过多次试验使用cairngorm和PureMVC框架对比,我决定Flex本身采用PureMVC框架。PHP本身采用ZendFrame框架,原因很简单,zend出身豪门,强大全面,不愧是Php框架中的战斗机。我把部分Flex以及PHP源码贴出来:

图片看不清楚点击放大

 

 

package org.openjfgame.service
{
 import flash.net.NetConnection;
 import flash.net.Responder;
 import org.openjfgame.event.*;
 import org.openjfgame.utils.*;

 import flash.events.*;
 import org.openjfgame.msg.local.amf.BaseAmfMsg;
 import org.openjfgame.msg.remote.amf.AmfMessage;
 /**
  *
  * @author luodongfu
  *
  */ 
 public class GameNetConnection extends NetConnection
 {

 

//php 游戏gameway  对应php:define('WEB_ROOT', 'http://127.0.0.1/openjpfgame/gateway/index');
  private var gateway:String;

 

//用户ID
  private var userID:int;

 

//会话ID
  private var sessionID:String;

 


  private var _netName:String;
  public function GameNetConnection( netName:String,gateway:String)
  {
   super();
   this.gateway=gateway;
   this._netName=netName;

 

  //给连接NetConnection监听链接状态并处理
   this.addEventListeneradminNC.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
    

//开始连接PHP

   this.connect(this.gateway);
  }
  
  private function statusHandler(evt:NetStatusEvent):void{
   trace(evt.info.code);

 

//根据PHP结果做相应处理
   switch(evt.info.code){
    case "NetConnection.Connect.Rejected":
     var appmsg:String = (evt.info.application == undefined) ? "" : evt.info.application;

 

   //使用PureMVC通知
     Globals.sendNotification(NotificationConst.CONNECT_AMF_SERVER_REJECTED,appmsg);
     break;

 

//使用PureMVC通知
    case "NetConnection.Connect.Failed":
     Globals.sendNotification(NotificationConst.CONNECT_AMF_SERVER_FAIL,evt.info.code);
     break;

//使用PureMVC通知
    case "NetConnection.Connect.Closed":
     Globals.sendNotification(NotificationConst.CONNECT_AMF_SERVER_CLOSED,evt.info.code);
     break;

//使用PureMVC通知
    case "NetConnection.Connect.Success":
     Globals.sendNotification(NotificationConst.CONNECT_AMF_SERVER_SUCCESS,evt.info.code);
     break;
   }
  }
  

//成功接收PHP返回来的信息并通知
  private function onResult(result:Object):void
  {
   var amfMessage:AmfMessage=new AmfMessage();
   amfMessage.copyValue(result);
   switch(amfMessage.result)
   {
    case Constants.REMOTE_SERVICE_RESULT_FAIL:
    case Constants.REMOTE_SERVICE_RESULT_SUCCESS:
     this.dispatchEvent(new JfEvent(amfMessage.remoteMethod,amfMessage.data));
     break;
    default:
    
   }
  }

 

//失败发出通知
  private function onFault(result:Object):void
  {
    Globals.sendNotification(NotificationConst.REMOTE_EXCEPTION,result.toString());
  }
  

//每次发送信息给PHP必须调用这个函数
  public function sendRemoteRequest(remoteMethod:String,bodyMessage:Object):void{
      var remoteMsg:BaseAmfMsg=new BaseAmfMsg(remoteMethod,bodyMessage);
   if(this.userID>0&&this.sessionID.length>0)
   {
    remoteMsg.userID=this.userID;
    remoteMsg.sessionID=this.sessionID;
   }
   this.call(remoteMethod, new Responder(onResult, onFault), remoteMsg);
  }
  
  private function resetUserInfo():void{
   this.userID=-1;
   this.sessionID=null;
  }
  
  public function setUserInfo( userID:int,sessionID:String):void{
   if(userID>0&&sessionID.length>0)
   {
    this.userID=userID;
    this.sessionID=sessionID;
   }
  }

  
  public function get netName():String
  {
   return this._netName;
  }

 }
}

 

/**
  *
  * @author luodongfu
  *
  */ 

package org.openjfgame.msg.remote.amf
{
 import org.openjfgame.msg.BaseMsg;
 
 public class AmfMessage extends BaseMsg
 {
  public var result:int;
  public var exception:String;
  public var data:*;
  public var remoteMethod:String;
  public function AmfMessage()
  {
   super();
  }
 }
}

 

 

PHP zend:

 

 

图片看不清楚点击放大

 

 

index.php

/**
  *
  * @author luodongfu
  *
  */ 

 

@header('Content-type:text/html;charset=UTF-8');
 error_reporting(E_ALL|E_STRICT);
 date_default_timezone_set('Asia/Shanghai');
 define('ROOT_DIR', dirname(dirname(__FILE__)));
 define('WEB_ROOT', 'http://127.0.0.1/openjpfgame/');
 define('CACHE_DIR', 'C:/cache');
    define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
    define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
 define('GAME_SERVICE_PATH', APPLICATION_PATH . './application/game');
    set_include_path('.'.PATH_SEPARATOR.'./library'.PATH_SEPARATOR.'./application/models/'.PATH_SEPARATOR.'./application/game/'.PATH_SEPARATOR.get_include_path());

 

require('Zend/Loader/Autoloader.php');
    Zend_Loader_Autoloader::getInstance()->registerNamespace('Zend_');

$config=new Zend_Config_Ini('./application/config/config.ini',null, true);
 Zend_Registry::set('config',$config);
 $dbAdapter=Zend_Db::factory($config->general->db->adapter,$config->general->db->config->toArray());
.........................................

...........................................

 

 

/**
  *
  * @author luodongfu
  *
  */ 

GatewayController .php

//所有游戏请求都在这里处理

class GatewayController extends Zend_Controller_Action
{
    public function init()
    {
  $this->getHelper('ViewRenderer')->setNoRender();
       
    }
    public function serviceAction()
    {
     echo Zend_Amf_Server_Factory::getInstance()->handle();
    }
}

 

 

 

 

  • 大小: 78.5 KB
  • 大小: 53.1 KB
1
0
分享到:
评论

相关推荐

    AMF-1.4.33.zip

    AMF-1.4.33.zip 文件可能包含了一个AMF版本1.4.33的实现或者相关的资源。这个版本可能是一个更新,提升了性能、安全性或者增加了新特性。由于标签部分为空,我们无法直接获取特定的上下文信息,但我们可以根据AMF的...

    AMF-master.zip

    AMF是一种轻量级,可移植的多媒体框架,可以抽象出大部分平台和API特定的细节,并允许使用各种技术轻松实现多媒体应用程序,如DirectX 11,OpenGL和OpenCL,并促进高效的互操作它们之间。master版本

    AMF-AUT-T3374.pdf

    标题“AMF-AUT-T3374.pdf”以及描述中提到的“S32K安全启动”,并且提及了“CSEc的操作”,意味着本文档是关于NXP的S32K微控制器(MCU)的安全性问题,特别强调了其中的CSEc(加密服务引擎)模块。S32K14x是S32K系列...

    AMF-JavaScript后台管理框架v1.0

    欢迎使用 JavaScript 后台管理框架 - AMF AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6 *、Firefox x 、Chrome x 、Safari x 、Opera x 等浏览器。 02) 快速: 基于...

    AMF-JavaScript 后台管理框架 v1.0

    AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6+*、Firefox x+、Chrome x+、Safari x+、Opera x+等浏览器。 02) 快速: 基于JavaScript原生态开发,运行快速高效...

    AMF-DES-T2409_DornerWorks.pdf

    在深入探讨Xen在i.MX8上...由于文档部分内容识别有误,可能对理解造成了部分影响,但基于给出的信息,能够整理出这些核心概念。这些信息对于任何对Xen在嵌入式系统领域应用感兴趣的开发者或工程师来说都是至关重要的。

    amf-file-format-spec

    AMF(Action Message Format)是一种紧凑的二进制格式,用于序列化ActionScript对象图。一旦序列化,AMF编码的对象图可以用于跨会话持久化和检索应用程序的公共状态,或者允许两个端点通过交换强类型数据进行通信。...

    AMF-JavaScript 后台管理框架.7z

    AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6+*、Firefox X+、Chrome X+、Safari X+、Opera X+等浏览器。 02) 快速: 基于JavaScript原生态开发,运行快速高效、...

    amf-php flex插件

    这是一个flex的lib库,方便开发者迅速开展amf连接操作。

    enunciate-amf-1.23.jar

    jar包,官方版本,自测可用

    AMF-AUT-T2653

    AMF-AUT-T2653 本文档主要介绍了 NXP 公司的汽车传感器解决方案,旨在提高汽车安全性、自主驾驶和能源效率。以下是从文档中提炼出的知识点: 1. 车联网和自动驾驶的重要性:随着汽车技术的发展,车联网和自动驾驶...

    CEVA推出AMF-Android多媒体框架.pdf

    【CEVA推出AMF-Android多媒体框架】 CEVA公司宣布推出了AMF,即Android多媒体框架,这是一个针对Android平台的专业多媒体处理解决方案。这个框架的主要目标是优化Android设备上的多媒体内容处理性能,提高应用开发...

    AMF-1.4.7.0.zip

    AMF是一种轻量级,可移植的多媒体框架,可以抽象出大部分平台和API特定的细节,并允许使用各种技术轻松实现多媒体应用程序,如DirectX 11,OpenGL和OpenCL,并促进高效的互操作它们之间。release版本。

    enunciate-amf-rt-1.8-sources.jar

    jar包,官方版本,自测可用

    AMF3 C++ 源码库码库

    AMF3(Action Message Format version 3)是Adobe公司开发的一种二进制数据序列化格式,主要用于Flash Player和Flex应用程序与服务器之间的数据交换。在C++编程环境中,AMF3库可以帮助开发者高效地处理这种数据格式...

    enunciate-amf-tools-1.7-rc2.jar

    jar包,官方版本,自测可用

    enunciate-amf-rt-1.23-sources.jar

    jar包,官方版本,自测可用

    enunciate-amf-rt-1.9-rc2.jar

    jar包,官方版本,自测可用

    enunciate-amf-tools-1.7-rc2-sources.jar

    jar包,官方版本,自测可用

    enunciate-amf-rt-1.27-rc2-sources.jar

    jar包,官方版本,自测可用

Global site tag (gtag.js) - Google Analytics