internal override void Init() { CoreLog.DebugFormat("[AssetCache Init] {0}", Path); m_LastLoadingProgress = 0f; Owner.m_AssetPathsNotReadyOrFailure.Add(Path); var resourceCache = Owner.EnsureResourceCache(ResourcePath); resourceCache.IncreaseRetainCount(); if (DependencyAssetPaths.Count <= 0) { CoreLog.DebugFormat("[AssetCache Init] {0} no dep. observe resource.", Path); Status = AssetCacheStatus.WaitingForResource; resourceCache.AddObserver(this); return; } Status = AssetCacheStatus.WaitingForDeps; foreach (var depAssetPath in DependencyAssetPaths) { var depAssetCache = Owner.EnsureAssetCache(depAssetPath); depAssetCache.IncreaseRetainCount(); depAssetCache.AddObserver(this); } }
private void OnSendCompleted(object sender, SocketAsyncEventArgs e) { foreach (var packet in m_PacketsToSendList) { Handler.OnRecycle(packet); } // Sending failed. if (e.SocketError != SocketError.Success) { CoreLog.DebugFormat("[TcpChannel OnSendCompleted] Failure, SocketError={0}.", e.SocketError); Close(); OnError("Sending data failed. Error data is a SocketError.", e.SocketError); return; } CoreLog.DebugFormat("[TcpChannel OnSendCompleted] Success, bytesTransferred={0}.", e.BytesTransferred); lock (m_PacketsToSend) { if (m_PacketsToSend.Count <= 0) { Interlocked.Exchange(ref m_IsSending, 0); return; } CopyPacketsToSend(); } DoSend(); }
internal override void Reset() { CoreLog.DebugFormat("[AssetCache Reset] {0}", Path); m_CopiedAssetObservers.Clear(); m_AssetObservers.Clear(); m_CopiedAssetAccessors.Clear(); m_AssetAccessors.Clear(); StopTicking(); StopAndResetLoadingTask(); AssetObject = null; foreach (var depAssetPath in DependencyAssetPaths) { var depAssetCache = Owner.EnsureAssetCache(depAssetPath); depAssetCache.RemoveObserver(this); depAssetCache.ReduceRetainCount(); } var resourceCache = Owner.EnsureResourceCache(ResourcePath); resourceCache.RemoveObserver(this); resourceCache.ReduceRetainCount(); DependencyAssetPaths = null; Status = AssetCacheStatus.None; Owner.m_AssetPathsNotReadyOrFailure.Remove(Path); m_DependencyAssetReadyCount = 0; ResourcePath = null; IsScene = false; m_LastLoadingProgress = 0; base.Reset(); }
internal override void Init() { CoreLog.DebugFormat("[ResourceCache Reuse] {0}", Path); Owner.m_ResourcePathsNotReadyOrFailure.Add(Path); Status = ResourceCacheStatus.WaitingForSlot; StartTicking(); }
internal virtual void ReduceRetainCount() { if (m_RetainCount <= 0) { throw new InvalidOperationException(Utility.Text.Format("Reducing retain count to negative, on '{0}' ({1}).", Path, GetType().Name)); } --m_RetainCount; CoreLog.DebugFormat("[{0} ReduceRetainCount] '{2}' to {1}", GetType().Name, m_RetainCount, Path); }
public void AddObserver(AssetCache resourceObserver) { if (Status == ResourceCacheStatus.Ready) { CoreLog.DebugFormat("[ResourceCache AddObserver] Path={0}, AssetPath={1} direct success", Path, resourceObserver.Path); resourceObserver.OnLoadResourceSuccess(Path, ResourceObject); } else if (Status == ResourceCacheStatus.Failure) { CoreLog.DebugFormat("[ResourceCache AddObserver] Path={0}, AssetPath={1} direct fail", Path, resourceObserver.Path); resourceObserver.OnLoadResourceFailure(Path, ErrorMessage); } else { m_ResourceObservers.Add(resourceObserver); } }
protected override void Update(TimeStruct timeStruct) { switch (Status) { case AssetCacheStatus.WaitingForSlot: if (IsScene) { SucceedAndNotify(); } else if (Owner.m_RunningAssetLoadingTasks.Count < Owner.m_RunningAssetLoadingTasks.Capacity) { m_LoadingTask = Owner.RunAssetLoadingTask(Path, Owner.EnsureResourceCache(ResourcePath).ResourceObject); CoreLog.DebugFormat("[AssetCache Update] {0} start loading.", Path); Status = AssetCacheStatus.Loading; } break; case AssetCacheStatus.Loading: if (!string.IsNullOrEmpty(m_LoadingTask.ErrorMessage)) { ErrorMessage = m_LoadingTask.ErrorMessage; CoreLog.DebugFormat("[AssetCache Update] {0} loading fail.", Path); FailAndNotify(); } else if (m_LoadingTask.IsDone) { AssetObject = m_LoadingTask.AssetObject; CoreLog.DebugFormat("[AssetCache Update] {0} loading success.", Path); SucceedAndNotify(); } else { if (LoadingProgress != m_LastLoadingProgress) { m_LastLoadingProgress = LoadingProgress; ProgressAndNotify(); } } break; } }
internal override void Reset() { CoreLog.DebugFormat("[ResourceCache Reset] {0}", Path); m_CopiedResourceObservers.Clear(); m_ResourceObservers.Clear(); StopTicking(); StopAndResetLoadingTask(); if (ResourceObject != null) { Owner.ResourceDestroyer.Destroy(ResourceObject); } Path = null; ResourceObject = null; ShouldLoadFromReadWritePath = false; Status = ResourceCacheStatus.None; Owner.m_ResourcePathsNotReadyOrFailure.Remove(Path); base.Reset(); }
protected override void Update(TimeStruct timeStruct) { switch (Status) { case ResourceCacheStatus.WaitingForSlot: if (Owner.m_RunningResourceLoadingTasks.Count < Owner.m_RunningResourceLoadingTasks.Capacity) { m_LoadingTask = Owner.RunResourceLoadingTask(Path, ShouldLoadFromReadWritePath ? Owner.ReadWritePath : Owner.InstallerPath); CoreLog.DebugFormat("[ResourceCache Update] {0} start loading", Path); Status = ResourceCacheStatus.Loading; } break; case ResourceCacheStatus.Loading: if (!string.IsNullOrEmpty(m_LoadingTask.ErrorMessage)) { ErrorMessage = m_LoadingTask.ErrorMessage; CoreLog.DebugFormat("[ResourceCache Update] {0} loading fail", Path); FailAndNotify(); } else if (m_LoadingTask.IsDone) { ResourceObject = m_LoadingTask.ResourceObject; CoreLog.DebugFormat("[ResourceCache Update] {0} loading success", Path); SucceedAndNotify(); } break; default: break; } }
public static void DebugFormat(string format, params object[] args) { CoreLog.DebugFormat(format, args); }
public static void DebugFormat(string format, object arg0, object arg1, object arg2) { CoreLog.DebugFormat(format, arg0, arg1, arg2); }
private void OnReceiveCompleted(object sender, SocketAsyncEventArgs e) { CoreLog.DebugFormat("[TcpChannel OnReceiveCompleted] socket error is '{0}', bytes transffered is {1}.", e.SocketError, e.BytesTransferred); // Receiving failed. if (e.SocketError != SocketError.Success) { Close(); OnError("Receiving data failed. Error data is a SocketError.", e.SocketError); return; } // Server stops this connection. if (e.BytesTransferred == 0) { Close(); OnError("Server stops this connection.", null); return; } // Receiving succeeded. m_ReceiveStream.Write(m_ReceiveBuffer, 0, e.BytesTransferred); long length = m_ReceiveStream.Position; m_ReceiveStream.Position = 0; while (m_ReceiveStream.Position < length) { if (m_CurrentPacketHeader == null) // Should read the next packet header. { // Packet header has not been completed received. if (length - m_ReceiveStream.Position < ReceivePacketHeaderLength) { break; } // Read the packet header. m_CurrentPacketHeader = Handler.DeserializePacketHeader(m_ReceiveStream); } else // Should read the next packet body. { // Current packet has not been completely received. if (length - m_ReceiveStream.Position < m_CurrentPacketHeader.PacketLength) { break; } { var packetHeader = m_CurrentPacketHeader; m_CurrentPacketHeader = null; var packet = Handler.Deserialize(packetHeader, m_ReceiveStream); lock (m_PacketsToReceive) { m_PacketsToReceive.Enqueue(packet); } } } } var underlyingBuffer = m_ReceiveStream.GetBuffer(); Buffer.BlockCopy(underlyingBuffer, (int)m_ReceiveStream.Position, underlyingBuffer, 0, (int)(length - m_ReceiveStream.Position)); m_ReceiveStream.Position = length - m_ReceiveStream.Position; if (m_State != NetChannelState.Connected) { return; } Receive(); }
internal virtual void IncreaseRetainCount() { m_RetainCount++; CoreLog.DebugFormat("[{0} IncreaseRetainCount] '{2}' to {1}", GetType().Name, m_RetainCount, Path); }