private void OnWebSocketChannelMissHeartBeat(WebSocketChannel networkChannel, int missHeartBeatCount) { var args = ReferencePool.Acquire <WebSocketMissHeartBeatEventArgs> ().Fill(networkChannel, missHeartBeatCount); GameEntry.Event.Fire(this, args); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 发送心跳消息包。 /// </summary> /// <returns>是否发送心跳消息包成功。</returns> public bool SendHeartBeat() { m_NetworkChannel.Send(ReferencePool.Acquire <CSHeartBeat>()); return(true); }
public static FlyingEnemyMoveState Create() { FlyingEnemyMoveState state = ReferencePool.Acquire <FlyingEnemyMoveState>(); return(state); }
/// <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); }
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); } }
/// <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); }
private void OnResourceUpdateFailure(object sender, GameFramework.Resource.ResourceUpdateFailureEventArgs e) { m_EventComponent.Fire(this, ReferencePool.Acquire <ResourceUpdateFailureEventArgs>().Fill(e)); }
/// <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); }
/// <summary> /// 创建加载资源代理辅助器异步加载资源完成事件。 /// </summary> /// <param name="asset">加载的资源。</param> /// <returns>创建的加载资源代理辅助器异步加载资源完成事件。</returns> public static LoadResourceAgentHelperLoadCompleteEventArgs Create(object asset) { LoadResourceAgentHelperLoadCompleteEventArgs loadResourceAgentHelperLoadCompleteEventArgs = ReferencePool.Acquire <LoadResourceAgentHelperLoadCompleteEventArgs>(); loadResourceAgentHelperLoadCompleteEventArgs.Asset = asset; return(loadResourceAgentHelperLoadCompleteEventArgs); }
private void OnNetworkError(object sender, Ash.Core.Network.NetworkErrorEventArgs e) { m_EventComponent.Fire(this, ReferencePool.Acquire <NetworkErrorEventArgs>().Fill(e)); }
/// <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)); }
/// <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)); }
/// <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); }
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); }
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); }
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); }
private void UpdateLaunchTips(string tips) { GameManager.Event.Fire(this, ReferencePool.Acquire <LaunchFormUpdateTipsEventArgs>().Fill(tips)); }
// Use this for initialization void Start() { instance = this; }
public AgentSessionManager() { pool = new ReferencePool <AgentSessionBase> { PruneInterval = 60_000 // 1 minute }; }