private void OnWebSocketChannelMissHeartBeat(WebSocketChannel networkChannel, int missHeartBeatCount)
        {
            var args = ReferencePool.Acquire <WebSocketMissHeartBeatEventArgs> ().Fill(networkChannel, missHeartBeatCount);

            GameEntry.Event.Fire(this, args);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 关闭并清理有限状态机。
 /// </summary>
 internal override void Shutdown()
 {
     ReferencePool.Release(this);
 }
            private void OnDownloadSuccess(object sender, DownloadSuccessEventArgs e)
            {
                VersionListProcessor versionListProcessor = e.UserData as VersionListProcessor;

                if (versionListProcessor == null || versionListProcessor != this)
                {
                    return;
                }

                try
                {
                    using (FileStream fileStream = new FileStream(e.DownloadPath, FileMode.Open, FileAccess.ReadWrite))
                    {
                        int length = (int)fileStream.Length;
                        if (length != m_VersionListCompressedLength)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Latest version list compressed length error, need '{0}', downloaded '{1}'.", m_VersionListCompressedLength.ToString(), length.ToString());
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }

                        fileStream.Position = 0L;
                        int hashCode = Utility.Verifier.GetCrc32(fileStream);
                        if (hashCode != m_VersionListCompressedHashCode)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Latest version list compressed hash code error, need '{0}', downloaded '{1}'.", m_VersionListCompressedHashCode.ToString(), hashCode.ToString());
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }

                        if (m_ResourceManager.m_DecompressCachedStream == null)
                        {
                            m_ResourceManager.m_DecompressCachedStream = new MemoryStream();
                        }

                        fileStream.Position = 0L;
                        m_ResourceManager.m_DecompressCachedStream.Position = 0L;
                        m_ResourceManager.m_DecompressCachedStream.SetLength(0L);
                        if (!Utility.Compression.Decompress(fileStream, m_ResourceManager.m_DecompressCachedStream))
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Unable to decompress latest version list '{0}'.", e.DownloadPath);
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }

                        if (m_ResourceManager.m_DecompressCachedStream.Length != m_VersionListLength)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Latest version list length error, need '{0}', downloaded '{1}'.", m_VersionListLength.ToString(), m_ResourceManager.m_DecompressCachedStream.Length.ToString());
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }

                        fileStream.Position = 0L;
                        fileStream.SetLength(0L);
                        fileStream.Write(m_ResourceManager.m_DecompressCachedStream.GetBuffer(), 0, (int)m_ResourceManager.m_DecompressCachedStream.Length);
                    }

                    if (VersionListUpdateSuccess != null)
                    {
                        VersionListUpdateSuccess(e.DownloadPath, e.DownloadUri);
                    }
                }
                catch (Exception exception)
                {
                    string errorMessage = Utility.Text.Format("Update latest version list '{0}' with error message '{1}'.", e.DownloadPath, exception.ToString());
                    DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                    OnDownloadFailure(this, downloadFailureEventArgs);
                    ReferencePool.Release(downloadFailureEventArgs);
                }
                finally
                {
                    if (m_ResourceManager.m_DecompressCachedStream != null)
                    {
                        m_ResourceManager.m_DecompressCachedStream.Position = 0L;
                        m_ResourceManager.m_DecompressCachedStream.SetLength(0L);
                    }
                }
            }
        private void OnWebSocketChannelClosed(WebSocketChannel networkChannel)
        {
            var args = ReferencePool.Acquire <WebSocketClosedEventArgs> ().Fill(networkChannel);

            GameEntry.Event.Fire(this, args);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 反序列化消息包。
        /// </summary>
        /// <param name="packetHeader">消息包头。</param>
        /// <param name="source">要反序列化的来源流。</param>
        /// <param name="customErrorData">用户自定义错误数据。</param>
        /// <returns>反序列化后的消息包。</returns>
        public Packet DeserializePacket(IPacketHeader packetHeader, Stream source, out object customErrorData)
        {
            // 注意:此函数并不在主线程调用!
            customErrorData = null;

            SCPacketHeader scPacketHeader = packetHeader as SCPacketHeader;

            if (scPacketHeader == null)
            {
                Log.Warning("Packet header is invalid.");
                return(null);
            }

            Packet packet = null;

            if (scPacketHeader.IsValid)
            {
                Type packetType = GetServerToClientPacketType(scPacketHeader.Id);
                if (packetType != null)
                {
                    packet = (Packet)RuntimeTypeModel.Default.DeserializeWithLengthPrefix(source, ReferencePool.Acquire(packetType), packetType, PrefixStyle.Fixed32, 0);
                }
                else
                {
                    Log.Warning("Can not deserialize packet for packet id '{0}'.", scPacketHeader.Id.ToString());
                }
            }
            else
            {
                Log.Warning("Packet header is invalid.");
            }

            ReferencePool.Release(scPacketHeader);
            return(packet);
        }
Exemplo n.º 6
0
 /// <summary>
 /// 注册中介者
 /// </summary>
 /// <param name="mediator"></param>
 public static void RegisterMediator <T>() where T : class, IMediator, new()
 {
     PureMVC.IView view = View.GetInstance(delegate { return(new View()); });
     view.RegisterMediator(ReferencePool.Require <T>() as IMediator);
 }
Exemplo n.º 7
0
        /// <summary>
        /// 创建加载资源代理辅助器异步读取资源二进制流完成事件。
        /// </summary>
        /// <param name="bytes">资源的二进制流。</param>
        /// <param name="loadType">资源加载方式。</param>
        /// <returns>创建的加载资源代理辅助器异步读取资源二进制流完成事件。</returns>
        public static LoadResourceAgentHelperReadBytesCompleteEventArgs Create(byte[] bytes, int loadType)
        {
            LoadResourceAgentHelperReadBytesCompleteEventArgs loadResourceAgentHelperReadBytesCompleteEventArgs = ReferencePool.Acquire <LoadResourceAgentHelperReadBytesCompleteEventArgs>();

            loadResourceAgentHelperReadBytesCompleteEventArgs.m_Bytes  = bytes;
            loadResourceAgentHelperReadBytesCompleteEventArgs.LoadType = loadType;
            return(loadResourceAgentHelperReadBytesCompleteEventArgs);
        }
Exemplo n.º 8
0
 /// <summary>
 /// 发送心跳消息包。
 /// </summary>
 /// <returns>是否发送心跳消息包成功。</returns>
 public bool SendHeartBeat()
 {
     m_NetworkChannel.Send(ReferencePool.Acquire <CSHeartBeat>());
     return(true);
 }
Exemplo n.º 9
0
        public static FlyingEnemyMoveState Create()
        {
            FlyingEnemyMoveState state = ReferencePool.Acquire <FlyingEnemyMoveState>();

            return(state);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 创建下载代理辅助器更新数据大小事件。
        /// </summary>
        /// <param name="deltaLength">下载的增量数据大小。</param>
        /// <returns>创建的下载代理辅助器更新数据大小事件。</returns>
        public static DownloadAgentHelperUpdateLengthEventArgs Create(int deltaLength)
        {
            if (deltaLength <= 0)
            {
                throw new GameFrameworkException("Delta length is invalid.");
            }

            DownloadAgentHelperUpdateLengthEventArgs downloadAgentHelperUpdateLengthEventArgs = ReferencePool.Acquire <DownloadAgentHelperUpdateLengthEventArgs>();

            downloadAgentHelperUpdateLengthEventArgs.DeltaLength = deltaLength;
            return(downloadAgentHelperUpdateLengthEventArgs);
        }
Exemplo n.º 11
0
 protected override void OnHide(object userData)
 {
     base.OnHide(userData);
     ReferencePool.Release(m_TestEntity2Data);
 }
            private void OnDownloadSuccess(object sender, DownloadSuccessEventArgs e)
            {
                UpdateInfo updateInfo = e.UserData as UpdateInfo;

                if (updateInfo == null)
                {
                    return;
                }

                using (FileStream fileStream = new FileStream(e.DownloadPath, FileMode.Open, FileAccess.ReadWrite))
                {
                    bool zip = (updateInfo.Length != updateInfo.ZipLength || updateInfo.HashCode != updateInfo.ZipHashCode);

                    int length = (int)fileStream.Length;
                    if (length != updateInfo.ZipLength)
                    {
                        fileStream.Close();
                        string errorMessage = Utility.Text.Format("Resource zip length error, need '{0}', downloaded '{1}'.", updateInfo.ZipLength.ToString(), length.ToString());
                        DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                        OnDownloadFailure(this, downloadFailureEventArgs);
                        ReferencePool.Release(downloadFailureEventArgs);
                        return;
                    }

                    if (zip)
                    {
                        fileStream.Position = 0L;
                        int hashCode = Utility.Verifier.GetCrc32(fileStream);
                        if (hashCode != updateInfo.ZipHashCode)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Resource zip hash code error, need '{0}', downloaded '{1}'.", updateInfo.ZipHashCode.ToString(), hashCode.ToString());
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }

                        if (m_ResourceManager.m_DecompressCachedStream == null)
                        {
                            m_ResourceManager.m_DecompressCachedStream = new MemoryStream();
                        }

                        try
                        {
                            fileStream.Position = 0L;
                            m_ResourceManager.m_DecompressCachedStream.Position = 0L;
                            m_ResourceManager.m_DecompressCachedStream.SetLength(0L);
                            if (!Utility.Zip.Decompress(fileStream, m_ResourceManager.m_DecompressCachedStream))
                            {
                                fileStream.Close();
                                string errorMessage = Utility.Text.Format("Unable to decompress resource '{0}'.", e.DownloadPath);
                                DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                                OnDownloadFailure(this, downloadFailureEventArgs);
                                ReferencePool.Release(downloadFailureEventArgs);
                                return;
                            }

                            if (m_ResourceManager.m_DecompressCachedStream.Length != updateInfo.Length)
                            {
                                fileStream.Close();
                                string errorMessage = Utility.Text.Format("Resource length error, need '{0}', downloaded '{1}'.", updateInfo.Length.ToString(), m_ResourceManager.m_DecompressCachedStream.Length.ToString());
                                DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                                OnDownloadFailure(this, downloadFailureEventArgs);
                                ReferencePool.Release(downloadFailureEventArgs);
                                return;
                            }

                            fileStream.Position = 0L;
                            fileStream.SetLength(0L);
                            fileStream.Write(m_ResourceManager.m_DecompressCachedStream.GetBuffer(), 0, (int)m_ResourceManager.m_DecompressCachedStream.Length);
                        }
                        catch (Exception exception)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Unable to decompress resource '{0}' with error message '{1}'.", e.DownloadPath, exception.Message);
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }
                        finally
                        {
                            m_ResourceManager.m_DecompressCachedStream.Position = 0L;
                            m_ResourceManager.m_DecompressCachedStream.SetLength(0L);
                        }
                    }
                    else
                    {
                        int hashCode = 0;
                        fileStream.Position = 0L;
                        if (updateInfo.LoadType == LoadType.LoadFromMemoryAndQuickDecrypt || updateInfo.LoadType == LoadType.LoadFromMemoryAndDecrypt)
                        {
                            Utility.Converter.GetBytes(updateInfo.HashCode, m_CachedHashBytes);
                            if (updateInfo.LoadType == LoadType.LoadFromMemoryAndQuickDecrypt)
                            {
                                hashCode = Utility.Verifier.GetCrc32(fileStream, m_CachedHashBytes, Utility.Encryption.QuickEncryptLength);
                            }
                            else if (updateInfo.LoadType == LoadType.LoadFromMemoryAndDecrypt)
                            {
                                hashCode = Utility.Verifier.GetCrc32(fileStream, m_CachedHashBytes, length);
                            }

                            Array.Clear(m_CachedHashBytes, 0, CachedHashBytesLength);
                        }
                        else
                        {
                            hashCode = Utility.Verifier.GetCrc32(fileStream);
                        }

                        if (hashCode != updateInfo.HashCode)
                        {
                            fileStream.Close();
                            string errorMessage = Utility.Text.Format("Zip hash code error, need '{0}', downloaded '{1}'.", updateInfo.ZipHashCode.ToString(), hashCode.ToString());
                            DownloadFailureEventArgs downloadFailureEventArgs = DownloadFailureEventArgs.Create(e.SerialId, e.DownloadPath, e.DownloadUri, errorMessage, e.UserData);
                            OnDownloadFailure(this, downloadFailureEventArgs);
                            ReferencePool.Release(downloadFailureEventArgs);
                            return;
                        }
                    }
                }

                m_UpdatingCount--;

                if (m_ResourceManager.m_ResourceInfos.ContainsKey(updateInfo.ResourceName))
                {
                    throw new GameFrameworkException(Utility.Text.Format("Resource info '{0}' is already exist.", updateInfo.ResourceName.FullName));
                }

                m_ResourceManager.m_ResourceInfos.Add(updateInfo.ResourceName, new ResourceInfo(updateInfo.ResourceName, updateInfo.LoadType, updateInfo.Length, updateInfo.HashCode, false));

                if (m_ResourceManager.m_ReadWriteResourceInfos.ContainsKey(updateInfo.ResourceName))
                {
                    throw new GameFrameworkException(Utility.Text.Format("Read-write resource info '{0}' is already exist.", updateInfo.ResourceName.FullName));
                }

                m_ResourceManager.m_ReadWriteResourceInfos.Add(updateInfo.ResourceName, new ReadWriteResourceInfo(updateInfo.LoadType, updateInfo.Length, updateInfo.HashCode));

                m_CurrentGenerateReadWriteListLength += updateInfo.ZipLength;
                if (m_UpdatingCount <= 0 || m_CurrentGenerateReadWriteListLength >= m_GenerateReadWriteListLength)
                {
                    m_CurrentGenerateReadWriteListLength = 0;
                    GenerateReadWriteList();
                }

                if (ResourceUpdateSuccess != null)
                {
                    ResourceUpdateSuccess(updateInfo.ResourceName, e.DownloadPath, e.DownloadUri, updateInfo.Length, updateInfo.ZipLength);
                }
            }
Exemplo n.º 13
0
        /// <summary>
        /// 创建加载资源代理辅助器更新事件。
        /// </summary>
        /// <param name="type">进度类型。</param>
        /// <param name="progress">进度。</param>
        /// <returns>创建的加载资源代理辅助器更新事件。</returns>
        public static LoadResourceAgentHelperUpdateEventArgs Create(LoadResourceProgress type, float progress)
        {
            LoadResourceAgentHelperUpdateEventArgs loadResourceAgentHelperUpdateEventArgs = ReferencePool.Acquire <LoadResourceAgentHelperUpdateEventArgs>();

            loadResourceAgentHelperUpdateEventArgs.Type     = type;
            loadResourceAgentHelperUpdateEventArgs.Progress = progress;
            return(loadResourceAgentHelperUpdateEventArgs);
        }
Exemplo n.º 14
0
 private void OnResourceUpdateFailure(object sender, GameFramework.Resource.ResourceUpdateFailureEventArgs e)
 {
     m_EventComponent.Fire(this, ReferencePool.Acquire <ResourceUpdateFailureEventArgs>().Fill(e));
 }
Exemplo n.º 15
0
        /// <summary>
        /// 创建 Web 请求代理辅助器错误事件。
        /// </summary>
        /// <param name="errorMessage">错误信息。</param>
        /// <returns>创建的 Web 请求代理辅助器错误事件。</returns>
        public static WebRequestAgentHelperErrorEventArgs Create(string errorMessage)
        {
            WebRequestAgentHelperErrorEventArgs webRequestAgentHelperErrorEventArgs = ReferencePool.Acquire <WebRequestAgentHelperErrorEventArgs>();

            webRequestAgentHelperErrorEventArgs.ErrorMessage = errorMessage;
            return(webRequestAgentHelperErrorEventArgs);
        }
Exemplo n.º 16
0
        /// <summary>
        /// 创建加载资源代理辅助器异步加载资源完成事件。
        /// </summary>
        /// <param name="asset">加载的资源。</param>
        /// <returns>创建的加载资源代理辅助器异步加载资源完成事件。</returns>
        public static LoadResourceAgentHelperLoadCompleteEventArgs Create(object asset)
        {
            LoadResourceAgentHelperLoadCompleteEventArgs loadResourceAgentHelperLoadCompleteEventArgs = ReferencePool.Acquire <LoadResourceAgentHelperLoadCompleteEventArgs>();

            loadResourceAgentHelperLoadCompleteEventArgs.Asset = asset;
            return(loadResourceAgentHelperLoadCompleteEventArgs);
        }
Exemplo n.º 17
0
 private void OnNetworkError(object sender, Ash.Core.Network.NetworkErrorEventArgs e)
 {
     m_EventComponent.Fire(this, ReferencePool.Acquire <NetworkErrorEventArgs>().Fill(e));
 }
Exemplo n.º 18
0
 /// <summary>
 /// 反序列消息包头。
 /// </summary>
 /// <param name="source">要反序列化的来源流。</param>
 /// <param name="customErrorData">用户自定义错误数据。</param>
 /// <returns></returns>
 public IPacketHeader DeserializePacketHeader(Stream source, out object customErrorData)
 {
     // 注意:此函数并不在主线程调用!
     customErrorData = null;
     return((IPacketHeader)RuntimeTypeModel.Default.Deserialize(source, ReferencePool.Acquire <SCPacketHeader>(), typeof(SCPacketHeader)));
 }
 private void OnDownloadSuccess(object sender, GameFramework.Download.DownloadSuccessEventArgs e)
 {
     m_EventComponent.Fire(this, ReferencePool.Acquire <DownloadSuccessEventArgs>().Fill(e));
 }
Exemplo n.º 20
0
 /// <summary>
 /// 释放对象。
 /// </summary>
 /// <param name="isShutdown">是否是关闭对象池时触发。</param>
 public void Release(bool isShutdown)
 {
     m_Object.Release(isShutdown);
     ReferencePool.Release(m_Object);
 }
 private void OnDownloadFailure(object sender, GameFramework.Download.DownloadFailureEventArgs e)
 {
     Log.Warning("Download failure, download serial id '{0}', download path '{1}', download uri '{2}', error message '{3}'.", e.SerialId.ToString(), e.DownloadPath, e.DownloadUri, e.ErrorMessage);
     m_EventComponent.Fire(this, ReferencePool.Acquire <DownloadFailureEventArgs>().Fill(e));
 }
Exemplo n.º 22
0
 /// <summary>
 /// 注册自定义代理
 /// </summary>
 /// <param name="proxy"></param>
 public static void RegisterProxy <T>() where T : class, IProxy, new()
 {
     PureMVC.IModel model = Model.GetInstance(delegate { return(new Model()); });
     model.RegisterProxy(ReferencePool.Require <T>() as IProxy);
 }
Exemplo n.º 23
0
 private void OnNetworkMissHeartBeat(object sender, GameFramework.Network.NetworkMissHeartBeatEventArgs e)
 {
     m_EventComponent.Fire(this, ReferencePool.Acquire <NetworkMissHeartBeatEventArgs>().Fill(e));
 }
        private void OnWebSocketChannelConnected(WebSocketChannel networkChannel, object userData)
        {
            var args = ReferencePool.Acquire <WebSocketConnectedEventArgs> ().Fill(networkChannel, userData);

            GameEntry.Event.Fire(this, args);
        }
Exemplo n.º 25
0
 private void OnNetworkCustomError(object sender, GameFramework.Network.NetworkCustomErrorEventArgs e)
 {
     m_EventComponent.Fire(this, ReferencePool.Acquire <NetworkCustomErrorEventArgs>().Fill(e));
 }
        private void OnWebSocketChannelSended(WebSocketChannel networkChannel, int bytesSent, object userData)
        {
            var args = ReferencePool.Acquire <WebSocketSentEventArgs> ().Fill(networkChannel, bytesSent, userData);

            GameEntry.Event.Fire(this, args);
        }
Exemplo n.º 27
0
 public TaskRunnerManager()
 {
     pool = new ReferencePool <TaskRunner> {
         PruneInterval = 60_000,
     };
 }
        private void OnWebSocketChannelError(WebSocketChannel networkChannel, GameFramework.Network.NetworkErrorCode errorCode, string errorMessage)
        {
            var args = ReferencePool.Acquire <WebSocketErrorEventArgs> ().Fill(networkChannel, errorCode, errorMessage);

            GameEntry.Event.Fire(this, args);
        }
Exemplo n.º 29
0
 private void UpdateLaunchTips(string tips)
 {
     GameManager.Event.Fire(this, ReferencePool.Acquire <LaunchFormUpdateTipsEventArgs>().Fill(tips));
 }
Exemplo n.º 30
0
 // Use this for initialization
 void Start()
 {
     instance = this;
 }
Exemplo n.º 31
0
 public AgentSessionManager()
 {
     pool = new ReferencePool <AgentSessionBase> {
         PruneInterval = 60_000 // 1 minute
     };
 }