Newer
Older
ubChattin / src / tuveNetwork.as
@reddawg reddawg on 12 Feb 2008 12 KB Cleaned Up Not Needed Functions
/************************************************************************
 * tuveNetwork Class, by Christopher Olsen <cwolsen@domainatlantic.com> *
 * Copyright 2007 Christopher Olsen                                     *
 *                                                                      *
 * $Id$          *
 ************************************************************************/
 
package {
  import flash.events.Event;
  import flash.events.IOErrorEvent;
  import flash.events.ProgressEvent;
  import flash.events.TimerEvent;
  import flash.net.Socket;
  import flash.utils.Timer; 
  import mx.controls.Alert;
	
  public class tuveNetwork {
  	private var tvSocket:Socket;
  	public  var tvMaster:Master;
  	private var attempts:Number = 0;
  	private var myTimer:Timer = new Timer(20000,1);
  	public  var tvNetCon:Boolean = false;
  	private var curTime:Number;
  		
  	public function init():void {
  	  myTimer.addEventListener(TimerEvent.TIMER_COMPLETE,conSocketEvent);
  	  conSocketEvent(null);
  	  } /* End init() */
  	  
  	private function conSocketEvent(event:TimerEvent):void {
  	  if (attempts >=3) {
  	  	Alert.show("Cannot reconnect to server. Some services will not be available.");
  	    }
  	  else {
  	  if (tvSocket == null)
        this.tvSocket = new Socket();
	  this.tvSocket.addEventListener(IOErrorEvent.IO_ERROR,onConnectError,false,0,true);
  	  this.tvSocket.addEventListener(ProgressEvent.SOCKET_DATA,gotData,false,0,true);
  	  this.tvSocket.addEventListener(Event.CONNECT,doNetAuth,false,0,true);
  	  this.tvSocket.addEventListener(Event.CLOSE,doReconnect,false,0,true);  	  	
  	    tvSocket.connect("Ivorytower.UbixOnline.com",9999);
  	    attempts++;
  	    }
  	  }
  	  
  	/* Send data to the socket */
  	public function sendData(data:String):void {
  	  tvSocket.writeUTFBytes(data + "\n");
  	  tvSocket.flush();
  	  } /* End sendData */
  	  
  	/* Let's auth to the network */
  	private function doNetAuth(event:Event):void {
  	  tvNetCon = true;
  	  sendData("CLIENT " + tvMaster.version); 	    
  	  } /* End doNetAuth */
  	  
  	private function doNetSuccess():void {
  	  tvMaster.userList = null;
  	  tvMaster.userList = new XMLList();
  	  tvMaster.masterObject.userDispList.dataProvider = tvMaster.userList;
  	  
  	  sendData("JOIN " + tvMaster.currentChannel);
  	  attempts = 0;
  	  
  	  tvMaster.masterObject.chatWindow.htmlText += "<TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"Verdana\" SIZE=\"10\" COLOR=\"#00FF00\" LETTERSPACING=\"0\" KERNING=\"0\">[" + tvMaster.fmtdDate() + "] Connected to server.</FONT></P></TEXTFORMAT>";
  	  }
  	  
  	private function onConnectError(event:IOErrorEvent):void {
  	  if (event.text == "close")
        myTimer.start();
      else 
        Alert.show("ERROR: " + event.text);
  	  } /* End onConnectionError */
  	  
    private function gotData(event:ProgressEvent):void {
      var _data:String;
   	  var _dataArray:Array;    	
      var data:String;
   	  var dataArray:Array;
   	  var _i:Number;
      var i:Number;
      var x:Number;
      var tmpString:String;
      var fc:Boolean = false;
      
      //event.bytesLoaded
      
      _data = this.tvSocket.readUTFBytes(this.tvSocket.bytesAvailable);
      _dataArray = _data.split("\n");
        
      for (_i = 0;_dataArray[_i] != null;_i++) {
        data = _dataArray[_i];
          
        if (data.length <= 0)
          return;
        
        if (data.indexOf("MSG") == 0) {
          dataArray = data.split(":");
          tmpString = dataArray[3];
          for (i=4;dataArray[i] != null;i++)
            tmpString += ":" + dataArray[i];
          
          if (dataArray[2] == "PRIVMSG") {
            tvMaster.sendIM(dataArray[1],tmpString);
            }
          else {
            if (dataArray[1] == "TUveD")
          	  tvMaster.masterObject.chatWindow.htmlText += "<TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"Verdana\" SIZE=\"10\" COLOR=\"#FF0000\" LETTERSPACING=\"0\" KERNING=\"0\">[" + tvMaster.fmtdDate() + "] " + tmpString + "</FONT></P></TEXTFORMAT>";         
            else
              tvMaster.masterObject.chatWindow.htmlText += "<P>[" + tvMaster.fmtdDate() + "] " + dataArray[1] + ": " + tmpString + "<P>";         
            }
          } /* End MSG */
        else if (data.indexOf("EMOTE") == 0) {
          dataArray = data.split(":");
          tmpString = dataArray[3];
          for (i=4;dataArray[i] != null;i++)
            tmpString += ":" + dataArray[i];
          tvMaster.masterObject.chatWindow.htmlText += "[" + tvMaster.fmtdDate() + "] " + dataArray[1] + " " + tmpString + "\n";
          } /* End EMOTE */
        else if (data.indexOf("PING") == 0) {
          tvSocket.writeUTFBytes("PONG!\n");
          tvSocket.flush();
          } /* End PING */
        else if (data.indexOf("LIST") == 0) {
          dataArray = data.split(":");     	
          tvMaster.tuveShowLW();
       
          if (dataArray[1] == "Channel") {
            tvMaster.channels = null;
            tvMaster.channels = new XMLList();
            }
          else {
            tvMaster.channels += new XML("<mi channel=\"" + dataArray[1] + "\" users=\"" + dataArray[2] + "\" topic=\"" + dataArray[3] + "\" cursong=\"" + dataArray[4] + "\" />");
            }

          } /* End LIST */
        else if (data.indexOf("JOIN") == 0) {
          dataArray = data.split(":");
          i = 2;

          while (dataArray[i] != null) {
       	    if (dataArray[i].indexOf("&") == 0)
       	      tmpString = dataArray[i].toString().substring(1,dataArray[i].toString().length);
       	    else
       	      tmpString = dataArray[i];
       	   
            tvMaster.userList += new XML("<mi label=\"" + dataArray[i] + "\" data=\"" + tmpString + "\" />");
            if (tvMaster.userName == tmpString) {
              tvMaster.masterObject.chatWindow.htmlText += "<TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"Verdana\" SIZE=\"10\" COLOR=\"#FF0000\" LETTERSPACING=\"0\" KERNING=\"0\">[" + tvMaster.fmtdDate() + "] You Are Now Talking In: " + dataArray[1] + "</FONT></P></TEXTFORMAT>";
              tvMaster.currentChannel = dataArray[1];
              
              fc = false;

              for (x = 0;x < tvMaster.chanList.length;x++) {
           	    if (tvMaster.currentChannel.toLowerCase() == tvMaster.chanList[x].channel.toLowerCase()) {
           	      tvMaster.masterObject.selChan.selectedIndex = x;
           	      fc = true;
           	      }
                }
                
              if (fc == false) {
                tvMaster.chanList.addItem({channel:dataArray[1]});
                tvMaster.masterObject.selChan.selectedIndex = tvMaster.chanList.length - 1;
                }
              }
            i += 2;

            }
          } /* End JOIN */
        else if (data.indexOf("GETVIDEO") == 0) {
       	  sendData("QUEUE EMPTY");
          } /* End GETVIDEO */
        else if (data.indexOf("PAUSE") == 0) {
          curTime = tvMaster.tvSyncNS.time;
          tvMaster.myTimer.stop();
          tvMaster.tvSyncNS.close();
          } /* End PAUSE */
        else if (data.indexOf("RESUME") == 0) {
          tvMaster.tvSyncNS.play(tvMaster.curSong,curTime);
          tvMaster.myTimer.start();
          } /* End RESUME */
        else if (data.indexOf("SEEK") == 0) {
          dataArray = data.split(":");
          if (dataArray[1] != null)
            tvMaster.tvSyncNS.seek(Number(dataArray[1]));
          } /* End SEEK */
        else if (data.indexOf("CURPOS") == 0) {
          dataArray = data.split(":");
          tvMaster.tvGotMeta = false;
          tvMaster.curSong = dataArray[3];
          if (tvMaster.tvSyncNC.connected == false) {
            tvMaster.tvSyncFailed = true;
            tvMaster.masterObject.chatWindow.htmlText += "<FONT COLOR=\"#990000\"><P>You are not currently connected to the video streaming service. Attempting Reconnect.</P></FONT>";
            return;
            }
          tvMaster.tvSyncNS.close();
          tvMaster.myTimer.stop();
          tvMaster.myTimer.reset();
          tvMaster.tvStartTime = Number(dataArray[2]);
          tvMaster.myTimer.delay = 1000;
          tvMaster.tvTotal = Number(dataArray[5])
          tvMaster.myCount = tvMaster.tvTotal - tvMaster.tvStartTime;
          tvMaster.myTimer.repeatCount = tvMaster.myCount;
          tvMaster.myTimer.start();
          tvMaster.tvSyncNS.play(tvMaster.curSong,0);
          
          
          if (dataArray[4].length > 45)
            tvMaster.masterObject.mainPanel.title = "ubChattin is playin " + dataArray[4].substr(0,45) + "...";
          else
            tvMaster.masterObject.mainPanel.title = "ubChattin is playin " + dataArray[4];
            
            
          tvMaster.vid = Number(dataArray[6]);
          } /* End CURPOS */
        else if (data.indexOf("KICK") == 0) {
          dataArray = data.split(":");
          tmpString = dataArray[3];
           for (i=4;dataArray[i] != null;i++)
             tmpString += ":" + dataArray[i];
          tvMaster.masterObject.chatWindow.htmlText += "You Have Been Kick By: " + dataArray[2] + " For " + tmpString + "\n";
          tvMaster.userList = null;
          tvMaster.userList = new XMLList;
          } /* End KICK */
        else if (data.indexOf("PART") == 0) {
          dataArray = data.split(":");

          for (i=0;i<tvMaster.userList.length();i++) {
            if (dataArray[2] == tvMaster.userList[i].@data) {
       	  	  delete(tvMaster.userList[i]);
              tvMaster.masterObject.userDispList.dataProvider = tvMaster.userList;
       	      break;
       	      }
            }
          } /* End PART */
        else if (data.indexOf("NICK") == 0) {
          dataArray = data.split(":");
          if (dataArray[1] == tvMaster.userName) {
       	    tvMaster.userName = dataArray[2];
            tvMaster.tvSO.data.userName = dataArray[2];
            }
          for (i=0;i<tvMaster.userList.length();i++) {
            if (dataArray[1] == tvMaster.userList[i].@label) {
              delete(tvMaster.userList[i]);
              tmpString = dataArray[2].toString();
           
              if (tmpString.indexOf("&") == 0)
                tmpString = tmpString.substr(1,tmpString.length -1);

              tvMaster.userList += new XML("<mi label=\"" + dataArray[2] + "\" data=\"" + tmpString + "\" />");
              tvMaster.masterObject.userDispList.dataProvider = tvMaster.userList;
              break;
              }
            }
          } /* End NICK */
        else if (data.indexOf("MODE") == 0) {
          dataArray = data.split(":");
          switch (dataArray[2]) {
            case 'O':
              for (i=0;i<tvMaster.userList.length();i++) {
                if (dataArray[4].toLowerCase() == tvMaster.userList[i].@data.toLowerCase()) {
                  delete(tvMaster.userList[i]);
                  tmpString = dataArray[2].toString();
                  if (dataArray[3] == 1)
                    tmpString = "&" + dataArray[4];
                  else
                    tmpString = dataArray[4];
 
                  tvMaster.userList += new XML("<mi label=\"" + tmpString + "\" data=\"" + dataArray[4] + "\" />");
                  tvMaster.masterObject.userDispList.dataProvider = tvMaster.userList;
                  break;
                  }
                }           
              break;
            }
          } /* End MODE */
        else if (data.indexOf("IDENT") == 0) {
          dataArray = data.split(":");
          if (dataArray[1] == 0) {
            doNetSuccess();
            tvMaster.authSuccess();
            }
          else {
       	    tvMaster.authFail(dataArray[2]);
            }
          } /* End IDENT */
        else if (data.indexOf("TOPIC") == 0) {
          var topic:Object = new Object();
          dataArray = data.split(":");
          tmpString = dataArray[2];
          for (i=3;dataArray[i] != null;i++)
            tmpString += ":" + dataArray[i];

          if (tmpString.length > 63)
            tvMaster.masterObject.chtPnl.title = tmpString.substr(0,63) + "...";
          else
            tvMaster.masterObject.chtPnl.title = tmpString;
            
          } /* End TOPIC */
        else if (data.indexOf("CLIENT") == 0) {
          dataArray = data.split(":");
          if (Number(dataArray[1]) == 1)
            Alert.show(dataArray[2]);

       	  sendData("IDENT " + tvMaster.userName + ":" + tvMaster.tvSO.data.myID);
          } /* End CLIENT */
        } /*End big for */
      }
      
    /* Reconnect when connection fails */
  	private function doReconnect(event:Event):void {
  	  tvMaster.masterObject.chatWindow.htmlText += "<FONT COLOR=\"#990000\"><P>DISCONNECTED From Server!!!</P></FONT>";
  	  tvNetCon = false;
  	  myTimer.start(); /* Reconnect */
  	  } /* End doReconnect() */
  	  
    } /* End podzNEtwork Class */
    
  } /* End package */