Показать сообщение отдельно
Старый 30.05.2013, 23:19
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 14  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Сейчас найду свой исходник.

Добавлено через 19 минут
Писать пора не в кадрах иначе ничего толкового не получиться.

Постараюсь объяснить что тут и как. Все что не прокомментированно пропускайте. Естественно адаптируйте под свои задачи

Main
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	import flash.display.StageScaleMode;
 
	import multiapi.MultiConnector;
	import flash.system.Security;
 
 
	public class Preloader extends Sprite {
 
		var cont:Sprite = new Sprite();
 
		public function Preloader() {		
 
			addChild(cont);
 
			stage.scaleMode = "noScale";
 
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event=null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			MultiConnector.stage = cont;
			MultiConnector.connected('inquestion_v2.26.swf');
 
		}
 
		//  A. Получить доступ 
		public function get external():Object {
			return MultiConnector.external;
		}
	}
}
MultiConnector
Код AS3:
package multiapi {
 
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.Stage;
 
	import multiapi.data.GlobalData;
 
	public class MultiConnector extends Object {
 
		public static var stage:Sprite;
 
		// статическая ссылка на класс
		protected static var _instance:*;
 
		public function MultiConnector(){}
 
		// B. возвращаем класс 
		public static function get external():Object {
 
			GlobalData.log.add('get external');
 
			// класс который будет доступен внутренему клипу
			if (!_instance) _instance = GlobalData.api;
 
			GlobalData.log.add('external ready');
 
			return _instance;
		}
 
		public static function connected($url:String):void {
 
			stage.addChild(GlobalData.log);
 
			GlobalData.api.init();
 
			GlobalData.loader.add($url, {'id':'main'});
			GlobalData.loader.get('main').addEventListener(Event.COMPLETE, loadingMainComplete);
			GlobalData.loader.start();
 
		}
 
		private static function loadingMainComplete(e:Event):void {
 
			GlobalData.loader.get('main').removeEventListener(Event.COMPLETE, loadingMainComplete);
			GlobalData.main = GlobalData.loader.getContent('main',true);
 
			while (GlobalData.mainTurn.length) {
				GlobalData.core.callMain(GlobalData.mainTurn[0].using,GlobalData.mainTurn[0].data);
				GlobalData.mainTurn.shift();
			}
			stage.addChild(GlobalData.main);
		}
 
	}
}
GlobalData
Код AS3:
package multiapi.data {
 
	import multiapi.Core;
	import multiapi.connector.UnitedAPI;
	import multiapi.logger.Logger;
	import multiapi.processor.Poster;
 
	import br.com.stimuli.loading.BulkLoader;
 
	import flash.display.MovieClip;
 
 
	public class GlobalData extends Object {
 
		public function GlobalData() {
 
		}
 
		{
			// собственно сам класс 
			api = new UnitedAPI();
			core = new Core();
			log = new Logger();
			loader = new BulkLoader("loader");
			poster = new Poster();
 
			cache = new Object();
			mainTurn = new Array();
 
			devApi = 'vk';
		}
 
		public static var core:Core;
		public static var log:Logger;
		public static var loader:BulkLoader;
		public static var api:UnitedAPI;
 
		public static var poster:Poster;
 
		public static var account:Object;
		public static var cache:Object;
 
		public static var main:MovieClip;
		public static var mainTurn:Array;
 
		public static var devApi:String;
	}
}
Все публичные свойства и методы этого класса будут доступны
UnitedAPI
Код AS3:
package multiapi.connector {
 
	import flash.display.Sprite;
 
	import vk.VKConnection;
	import vk.events.*;
 
	import fs.FSConnection;
 
	import com.adobe.serialization.json.JSON;
 
	import multiapi.data.GlobalData;
 
	import flash.events.Event;
 
	public class UnitedAPI extends Sprite {
 
		protected var status:Object;
 
		public var version = "vk";
 
		public var me:Object = new Object();
		public var api2:Object = new Object();
		public var app:Object = new Object();
 
		private var ex:External = new External();
 
		public var multi:*;
 
		public function UnitedAPI() {
			status = new Object();
		};
 
		public function init():void {
 
			if (status.ex) return;
 
			ex.init();
 
			status.ex = true;
		}
 
		public function initConnection(data:Object=null):void {
 
			if (!data) data = ex.call("exportAppData");
 
			if (status.connection) return;
 
			status.connection = true;
 
			version = data.api;
 
			GlobalData.log.add("API detect:"+version);
			//GlobalData.log.add(data);
 
			var flashVars = new Object();
 
			switch (data.api) {
				case "fs": {
 
					me.user_id =  data.userId;
 
					flashVars['apiUrl'] = data.apiUrl;
					flashVars['apiId'] = data.apiId;
					//flashVars['method'] = data.viewer_id;
					//flashVars['sig'] = data.sid;
 
					multi = new FSConnection(me.user_id, flashVars);
					multi.ex = ex;
 
					GlobalData.core.run('SET_UID');
					break;
				}
				case "vk": {
 
					api2.api_id 	=  data.api_id;
					api2.api_url = data.api_url;
					api2.auth_key = data.auth_key;
					api2.access_token = data.access_token;
					api2.secret = data.secret;
 
					app.install = data.is_app_user;
					app.setting = data.api_settings;
					app.lc_name = data.lc_name;
					app.session_id = data.sid; 
 
					me.api = "vk";
					me.user_id= data.viewer_id;
					me.view_id = data.user_id;
 
					flashVars['api_id'] = data.api_id;
					flashVars['viewer_id'] = data.viewer_id;
					flashVars['sid'] = data.sid;
					flashVars['secret'] = data.secret;
 
					multi = new VKConnection(flashVars);
 
					GlobalData.core.run('SET_UID');
 
					break;
				} default: {
					GlobalData.core.run('API_UNDEFINED');
					return;
				}
			}		
		}
 
		public function getMyUser():void {
 
			GlobalData.log.add("getMyUser");
 
			var method = ApiConvertor.usersget(version);
 
			var params = new Object();
				params[ApiConvertor.uids(version)] = me.user_id;
				params[ApiConvertor.fields(version)] = ApiConvertor.fieldsParamsUser(version); 			
 
			multi.api(method, params , fetchUserInfo, onApiRequestFail);
		}
 
		public function join(event:String, callBack:Function):void {
			(ex.join(ApiConvertor.event(version,event),callBack)) ? GlobalData.log.add('Join '+event) : GlobalData.log.add('Join '+event+' already');
		}
 
		public function post(user_id:String,options:Object,callBackOk:Function=null,callBackFail=null):void {
 
			GlobalData.log.add('posting for user > '+user_id);
			GlobalData.log.add(options);
 
			if (!callBackFail) callBackFail = onApiRequestFail;
 
			multi.api("photos.getWallUploadServer", {"uid":user_id}, function(data:Object):void { GlobalData.log.add(data); GlobalData.poster.images(data,user_id,options,callBackOk,callBackFail) } , callBackFail);
		}
 
		public function method($method:String, $data:Object=null):void {
 
			var method:String = ApiConvertor.method(version,$method);
 
			GlobalData.log.add('UnitedMethod: '+$method+' API: '+method);
 
			var send:Object = new Object();
				send.method = method;
 
			if ($data) send.data = $data;
 
			ex.call('method', send);
		}
 
		private function createPendingEvent(event:String,data:Object=null):void {
			GlobalData.log.add("Event "+event);
			dispatchEvent(new Event(event));
		}
 
		public function test():String {
			return "Test call";
		}
 
		private function fetchUserInfo(data: Object): void {
 
			GlobalData.log.add("<b>*** fetchUserInfo ***</b>");
 
			var SocialData = ApiConvertor.parsUserData(version,data);			
 
			if (SocialData) {
				GlobalData.log.add(SocialData);
 
				GlobalData.core.run('SOCIAL_USERDATA', SocialData);
				GlobalData.core.run('SOCIAL_AUTH');
			} else {
				GlobalData.log.add("Error "+data);
				GlobalData.log.add(data);
			}
		}
		private function onApiRequestFail(data: Object): void {
 
			GlobalData.log.add("Error: "+data.error_msg);
		}
		private function wallPostSuccess(data: Object): void {
			GlobalData.log.add("Success wall.post post_id: "+data.post_id.toString());
		}
		private function wallPostFail(data: Object): void {
			GlobalData.log.add("Fail wall.post error_msg: "+data.error_msg);
		}
 
	}
 
}
Internal
Код AS3:
ADDED_TO_STAGE
 
wrapper = Object(parent.parent);
 
// функция из класса UnitedAPI
wrapper.external.getMyUser();
__________________
return this...


Последний раз редактировалось AlexCooper; 30.05.2013 в 23:43.