// #define USE_LOCAL_SERVER /* * Copyright (c) 2013 Jayce Rettob * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/3.0/. */ using com.jbrettob.core; using PlayerIOClient; using System.Collections.Generic; namespace com.jbrettob.data.api { public class PlayerIOAPI:CoreObject, IPlayerIOAPI { private bool _initialized; private string _gameID; private Client _client; private Connection _connection; private List _playerIOSendRateList; private float _deltaTime; private Callback _onClientConnectedCallback; private Callback _onClientConnectErrorCallback; public PlayerIOAPI(string gameID) { _gameID = gameID; _playerIOSendRateList = new List(); _deltaTime = 0; addSendRateComponent(new SendPlayerUpdate()); if (debug) logDebug("gameID: " + gameID); } #region IPlayerIO implementation public void init(UnityEngine.MonoBehaviour monoBehaviour) { if (_initialized) { logError("init() PlayerIO is already been initialized!"); return; } PlayerIOClient.PlayerIO.UnityInit(monoBehaviour); _initialized = true; } public string gameID { get { return _gameID; } } public bool initialized { get { return _initialized; } } public PlayerIOClient.Client client { get { return _client; } } public void setClient(Client client) { _client = client; } public void connectClient(string connectionID, string userID, string auth, string partnerID, PlayerIOClient.Callback onClientConnected, PlayerIOClient.Callback onClientConnectError) { if (_client != null) { logError("connectClient() We have already established an client connection! Please disconnect first, before connecting again."); return; } logDebug("Connecting to server: [GameID = '"+gameID+"', ConnectionID='"+connectionID+"', userID='"+userID+"', auth='"+auth+"', parnerID='"+partnerID+"']"); _onClientConnectedCallback = onClientConnected; _onClientConnectErrorCallback = onClientConnectError; PlayerIOClient.PlayerIO.Connect(gameID, connectionID, userID, auth, partnerID, this.onClientConnected, this.onClientConnectError); } private void onClientConnected(Client client) { _client = client; if (debug) logDebug("onClientConnected()"); // Uncoment the line below to use the Development Server #if USE_LOCAL_SERVER client.Multiplayer.DevelopmentServer = new ServerEndpoint("localhost",8184); #endif IPlayerIOResult result = new PlayerIOResult(true, PlayerIOClient.ErrorCode.AccessDenied, null); _onClientConnectedCallback(result); } private void onClientConnectError(PlayerIOError playerIOError) { IPlayerIOResult result = new PlayerIOResult(false, playerIOError.ErrorCode, playerIOError.Message); if (debug) logError("onClientConnectError() result: " + result.message); _onClientConnectErrorCallback(result); } public PlayerIOClient.Connection connection { get { return _connection; } } public void setConnection(Connection connection) { _connection = connection; } public void addSendRateComponent(IPlayerIOSendRate playerIOSendRateComponent) { _playerIOSendRateList.Add(playerIOSendRateComponent); } public void updateSendRateComponents(float deltaTime) { foreach (IPlayerIOSendRate result in _playerIOSendRateList) { result.update(deltaTime); } } public void sendMessage(string eventName) { sendMessage(eventName, false); } public void sendMessage(string eventName, bool forced) { sendMessage(eventName, forced, null); } public void sendMessage(string eventName, bool forced, params object[] data) { IPlayerIOSendRate result = getSendrateComponentByEventName(eventName); result.sendMessage(result.eventName, forced, data); } public void setDeltaTime(float deltaTime) { _deltaTime = deltaTime; } public float deltaTime { get { return _deltaTime; } } #endregion private IPlayerIOSendRate getSendrateComponentByEventName(string eventName) { foreach (IPlayerIOSendRate result in _playerIOSendRateList) { if (result.eventName == eventName) { return result; } } return null; } } }