FlashCom 连接器

  本连接器代码是可支持Flashcom多端口(1935,443,80),多协议(rtmp,rtmps,rtmpt)扫描.
以下是Connector.as代码片段:
//======================================; 
// Name:Connector.as 
// Auther:Kinglong 
// Email:kinglong@gmail.com 
// Date:2005-06-29 
// Desc:FCS连接器; 
//=======================================; 
import mx.events.EventDispatcher; 
//=======================================; 
class com.klstudio.fcs.Connector extends Object{ 
 //======================================; 
 private var dispatchEvent:Function; 
 public var addEventListener:Function; 
 public var removeEventListener:Function; 
 public var target:Object; 
 public var index:Number; 
 //======================================; 
 private var __connectListArray:Array; 
 private var __host_name:String; 
 private var __app_name:String; 
 private var __connected:Boolean; 
 private var __connect_list_point:Number; 
 private var __connection_num:Number; 
 private var __connection_max_num:Number; 
 private var __connection:NetConnection; 
 private var __connection_params:Object; 
 //=======================================; 
 private var __mar_next_connect:Number; 
 private var __mar_all_failed_connect:Number; 
 //=======================================; 
 function Connector(host:String,app:String){ 
  if(arguments.length>1){ 
   this.__host_name = host; 
   this.__app_name = app; 
  } 
  this.initConnector(); 
 } 
 //========================================; 
 // 初始化对象; 
 //========================================; 
 private function initConnector():Void{ 
  //=======================================; 
  EventDispatcher.initialize(this); 
  //=======================================;  
  this.__connected = false; 
  this.__connection_num = 0; 
  this.__connection_max_num = 3; 
  this.__connection = null; 
  this.__connection_params = null; 
  //=======================================; 
  this.__connectListArray = new Array(); 
  this.__connectListArray.push({protocol: "rtmp", port: 1935}); 
  this.__connectListArray.push({protocol: "rtmp", port: 443}); 
  this.__connectListArray.push({protocol: "rtmpt", port: 80}); 
  this.__connectListArray.push({protocol: "rtmps", port: 443}); 
  //=======================================;   
 } 
 //========================================; 
 // 启动连接表; 
 //========================================; 
 private function doActualConnect():Void{ 
  this.removeAllTimeOut(); 
  this.__connection_num ++; 
  if(this.__connection_num > this.__connection_max_num){ 
   this.myTrace("总共尝试"+this.__connection_max_num+"次 都失败!"); 
   this.dispatchEvent({type:"failed",data:"服务器连接失败!"}); 
   return; 
  } 
  this.__connect_list_point = 0; 
  var i:Number; 
  for(i=0;i<this.__connectListArray.length;i++){ 
   this["temp_nc_"+i] = new NetConnection(); 
   this["temp_nc_"+i].index = i; 
   this["temp_nc_"+i].target = this; 
   this["temp_nc_"+i].onStatus = this.doStatus; 
  } 
  var connection_uri:String = this.__connectListArray[this.__connect_list_point].protocol+"://"+this.__host_name+":"+this.__connectListArray[this.__connect_list_point].port+"/"+this.__app_name; 
  this.myTrace("[尝试"+this.__connection_num+"/"+this.__connection_max_num+"]连接到 "+(this.__connect_list_point+1)+"/"+this.__connectListArray.length+": "+connection_uri); 
  this.dispatchEvent({type:"connect",data:this.__connectListArray[this.__connect_list_point]}); 
  this["temp_nc_"+this.__connect_list_point].connect(connection_uri,this.__connection_params); 
  this.__mar_next_connect = setInterval(this,"nextConnect",3000); 
 } 
 //========================================; 
 // 下一个连接; 
 //========================================; 
 private function nextConnect():Void{ 
  clearInterval(this.__mar_next_connect); 
  this.__connect_list_point ++; 
  if(this.__connect_list_point<this.__connectListArray.length){   
   var connection_uri:String = this.__connectListArray[this.__connect_list_point].protocol+"://"+this.__host_name+":"+this.__connectListArray[this.__connect_list_point].port+"/"+this.__app_name; 
   this.myTrace("[尝试"+this.__connection_num+"/"+this.__connection_max_num+"]连接到 "+(this.__connect_list_point+1)+"/"+this.__connectListArray.length+": "+connection_uri); 
   this.dispatchEvent({type:"connect",data:this.__connectListArray[this.__connect_list_point]}); 
   this["temp_nc_"+this.__connect_list_point].connect(connection_uri,this.__connection_params); 
   this.__mar_next_connect = setInterval(this,"nextConnect",3000); 
  } 
 } 
 //=========================================; 
 // 下一个连接; 
 //=========================================; 
 private function allFailedConnect():Void{ 
  clearInterval(this.__mar_all_failed_connect); 
  this.doActualConnect(); 
 } 
 //=========================================; 
 // 取消所有线程; 
 //=========================================; 
 private function removeAllTimeOut(ncIndex:Number):Void{ 
  if(arguments.length == 0){ 
   ncIndex = -1; 
  } 
  clearInterval(this.__mar_next_connect); 
  clearInterval(this.__mar_all_failed_connect); 
  var i:Number; 
  for(i=0;i<this.__connectListArray.length;i++){ 
   if(i == ncIndex){ 
    this.myTrace(this.__connectListArray[ncIndex].protocol+"://"+this.__host_name+":"+this.__connectListArray[ncIndex].port+"/"+this.__app_name+" 连接尝试成功!"); 
   }else{ 
    this["temp_nc_"+i].close(); 
    delete this["temp_nc_"+i]; 
   } 
  } 
 } 
 //=========================================; 
 private function doStatus(ncInfo:Object):Void{ 
  this.target.onStatus(this.index,ncInfo); 
 } 
 //=========================================; 
 private function onStatus(ncIndex:Number,ncInfo:Object):Void{ 
  switch(ncInfo.code){ 
   case "NetConnection.Connect.Success": 
    this.removeAllTimeOut(ncIndex); 
    this.__connection = this["temp_nc_"+ncIndex]; 
    this.__connected = true; 
    this.dispatchEvent({type:"success"});     
   break; 
   case "NetConnection.Connect.Failed": 
    this.myTrace(this.__connectListArray[ncIndex].protocol+"://"+this.__host_name+":"+this.__connectListArray[ncIndex].port+"/"+this.__app_name+" 连接尝试失败!"); 
    if(ncIndex==this.__connectListArray.length-1){ 
     this.myTrace("所有连接尝试失败!"); 
     this.removeAllTimeOut(); 
     this.__mar_all_failed_connect = setInterval(this,"allFailedConnect",5000); 
    } 
   break; 
   case "NetConnection.Connect.Closed": 
   case "NetConnection.Connect.AppShutdown": 
    this.dispatchEvent({type:"closed"}); 
   break; 
   case "NetConnection.Connect.Rejected": 
    this.removeAllTimeOut(); 
    this.myTrace("FlashCom服务器不接收连接尝试!"); 
    this.dispatchEvent({type:"failed",data:ncInfo.application.message}); 
   break; 
  }   
 } 
 //=========================================; 
 // 调试; 
 //=========================================; 
 private function myTrace(msg:Object):Void{ 
  trace("#Connector#: "+msg); 
  getURL("FSCommand:log", "#Connector#: "+msg); 
 } 
 //=========================================; 
 // 设置连接参数; 
 //=========================================; 
 public function setConnectParams(param:Object):Void{ 
  this.__connection_params = param; 
 } 
 //=========================================; 
 // 设置连接表; 
 //=========================================; 
 public function setConnectListArray(arr:Array):Void{ 
  this.__connectListArray = arr; 
 } 
 //=========================================; 
 // 设置最大尝试连接资料; 
 //=========================================; 
 public function setConnectMaxNum(num:Number):Void{ 
  if(num>1 && num <11){ 
   this.__connection_max_num = num; 
  } 
 } 
 //=========================================; 
 // 连接FCS服务器; 
 //=========================================; 
 public function connect():Void{ 
  if(this.__connected) return; 
  this.__connection_num = 0; 
  this.doActualConnect(); 
 } 
 //=========================================; 
 // 检查是否连接成功; 
 //=========================================; 
 public function isConnected():Boolean{ 
  return this.__connected;  
 } 
 //=========================================; 
 // 获取主连接NC; 
 //=========================================; 
 public function getConnection():NetConnection{ 
  return this.__connection;  
 }  
}     不过本类也不是我首创,我也是在Breeze和云开写的代码基础上优化而来的!

时间: 2024-10-28 02:41:58

FlashCom 连接器的相关文章

再探FlashCom的HTTP Tunneling

我以前有文章讲过HTTP Tunneling,最近在自己Server实战,发现一个问题,因为Port 80给Apache用了,岂不是对于Web Server和FlashCom是同一台机器的,无法实现HTTP Tunneling?翻查FlashCom帮助,关于HTTP Tunneling的说明非常少而模煳不清,于是直接看<FlashCom>/conf/_defaultRoot_/Adaptor.xml关于HTTP Port设定部分的註释,反而发现FlashCom可以Bind向多个IP Port,

初体验SQL Server 2012的Hadoop连接器

本文讲的是初体验SQL Server 2012的Hadoop连接器,电影<天下无贼>中一句经典的"21世纪什么最贵?人才!",体现了以人为本的价值观.而实际上,深处大数据时代的我们,是不是也应该幽默一回:"21世纪什么最值钱?数据!".对于企业而言,除了人才,数据也是最重要资产之一. "大"数据的价值 面对如此庞大的数据,企业该如何挖掘其中的商机呢?这里给出一些应用场景,简单梳理一下大数据的价值所在: ·在以用户为中心的SNS网络中,

手机软件-连接器,手机版,蓝色得突然

问题描述 连接器,手机版,蓝色得突然 上面f图是什么软件 解决方案 facebook,国内是上不了的 解决方案二: 应用商店和国外社交软件Facebook在国内是登录不了的,想登录需要用VPN 解决方案三: facebook,美国的社交软件,想QQ一样,如果在中国要使用的话必须翻墙,你可以在网上百度一下云梯的翻墙工具

【配置tomcat的https连接器】,访问https://localhost:8443,网页无法显示

问题描述 [配置tomcat的https连接器],访问https://localhost:8443,网页无法显示 1. 首先我使用命令keytool -genkey -alias tomcat -keyalg RSA生成我自己的数字签名,将生成的keystore文件拷贝到tomcat的conf目录下 2. 然后我在在server.xml中配置了 < Connector port="8443" protocol="HTTP/1.1" SSLEnabled=&qu

微博已成中国和世界真正的“连接器”

四年一届奥运会,今年奥运在里约. 距离2016年奥运会正式开幕还有半年,但前哨战已经悄然打响!因为奥运会是今年最重大的体育赛事,也是中国网民瞩目的焦点.实际上,品牌企业.互联网公司都已经磨刀霍霍,要抢食这一场盛宴带来的大蛋糕. 作为GDP世界第二的大国,作为体育热情持续上涨的市场,作为网络最发达的国家之一,毫不夸张地说,中国受到了巴西奥组委的空前重视.巴西官方希望,能借助里约奥运会更好地与中国人民互动起来:即促进奥运会的关注,更促进对巴西的了解,带来商务.旅游的全面发展. 通过啥平台互动?必须是

Microsoft Teams可通过标签、自动程序和连接器进行扩展

微软发布了一个名为Teams的工具,这是一种以聊天为中心并与Office 365集成的团队协作工作区.开发人员有机会使用标签(Tabs).自动程序(chat Bots)和连接器(Connectors)对Teams进行扩展. Teams是一种类似于Slack的工具,集成于Office365应用程序套件之中.工作团队能够通过Skype文本或语音/视频通话方式进行沟通.团队成员之间可以讨论.投票.交换图像和文件等.微软已将Teams工作区建设成为一个平台,可由开发人员通过标签.自动程序和Office

(急)jmx监控websphere6.1时报启用SOAP连接器安全性时,系统无法创建连接到端口8880

问题描述 2012-7-126:53:40com.ibm.websphere.management.AdminClientFactory警告:ADMC0046Wcom.ibm.websphere.management.exception.ConnectorException:ADMC0053E:启用SOAP连接器安全性时,系统无法创建连接到端口8880上的主机192.9.200.253的SOAP连接器.atcom.ibm.websphere.management.AdminClientFacto

exchang 邮件Internet SMTP 连接器异常,无法正常外发工作

问题描述 不知怎么多了一条上图红色(Internet邮件SMTP连接器)的连接器在队列中.邮件就无法正常工作,过几天后又可以了.之前没有的,但Internet邮件SMTP连接器还出现在队列中.什么问题?怎么解决?

TE解读数据中心连接器趋势 创新方案满足未来所需

云业务.大数据在各行各业的迅速普及驱动了数据中心产业的高速增长,电信网络未来的架构方向亦将以数据中心为中心,这不仅对服务器.交换机等主设备,同时也对数据中心内.外部的连接提出了更高要求. 2017慕尼黑上海电子展上,TE Connectivity(TE)全面展示了面向数据中心和消费类移动设备两大重点应用领域的创新连接解决方案,来自TE数据与终端设备事业部的两位高管亦与到访媒体分享了其对云时代连接与传感领域的趋势判断与解决思路. "作为一家硬件供应商,TE不仅要满足客户的需求,还要提前一步预测到他