public virtual bool BeforeRemoveFromCache() { if (EmptyRoomLiveTime <= 0) { return(true); } // execute the schedule with the ExecutionFiber so properties // are accessed thread safe. ExecutionFiber.Enqueue(() => ScheduleRoomRemoval(EmptyRoomLiveTime)); return(false); }
protected virtual void Dispose(bool dispose) { IsDisposed = true; if (dispose) { ExecutionFiber.Dispose(); if (_removeTimer != null) { _removeTimer.Dispose(); _removeTimer = null; } } }
protected void ScheduleRoomRemoval(int roomLiveTime) { if (RemoveTimer != null) { RemoveTimer.Dispose(); RemoveTimer = null; } if (Log.IsDebugEnabled) { Log.DebugFormat("Scheduling room removal: roomName={0}, liveTime={1:N0}", Name, roomLiveTime); } RemoveTimer = ExecutionFiber.Schedule(TryRemoveRoomFromCache, roomLiveTime); }
public Room(string name, RoomCacheBase roomCache = null, int emptyRoomLiveTime = 0) : this(name, new PoolFiber(), roomCache, emptyRoomLiveTime) { ExecutionFiber.Start(); }
public IDisposable ScheduleMessage(IMessage message, long timeMs) { return(ExecutionFiber.Schedule(() => ProcessMessage(message), timeMs)); }
public void EnqueueOperation(PlayerPeer peer, OperationRequest operationRequest, SendParameters sendParameters) { ExecutionFiber.Enqueue(() => ExecuteOperation(peer, operationRequest, sendParameters)); }
public void EnqueueMessage(IMessage message) { ExecutionFiber.Enqueue(() => ProcessMessage(message)); }