// a bit dirty. only used by WorldClientCollection public void Send(SegmentStream stream) { if (Socket == null || !Connected) { stream.Dispose(); return; } var args = ObjectPoolMgr.ObtainObject <PoolableSocketArgs>(); try { args.Completed += OnSendCompleted; args.SetBuffer(stream.Segment.Buffer.Array, stream.Segment.Offset, (int)(stream.Position)); args.UserToken = stream; if (!Socket.SendAsync(args)) { args.Completed -= OnSendCompleted; stream.Dispose(); ObjectPoolMgr.ReleaseObject(args); } } catch { args.Dispose(); stream.Dispose(); // args could be disposed if an error occured throw; } }
public static SocketAsyncEventArgs AcquireSocketArg() { var args = ObjectPoolMgr.ObtainObject <SocketAsyncEventArgs>(); CleanSocketArg(args); return(args); }
public static void ReleaseSocketArg(SocketAsyncEventArgs arg) { //Interlocked.Increment(ref s_ReleasedArgs); //Interlocked.Decrement(ref s_OutstandingArgs); //Console.WriteLine("Releasing SocketAsyncEventArg {0}:{1}", s_OutstandingArgs, s_ReleasedArgs); ObjectPoolMgr.ReleaseObject <SocketAsyncEventArgs>(arg); }
static SocketHelpers() { if (!ObjectPoolMgr.ContainsType <SocketAsyncEventArgs>()) { ObjectPoolMgr.RegisterType(CreateSocketArg); ObjectPoolMgr.SetMinimumSize <SocketAsyncEventArgs>(CfgMgr.BasicCfg.MaxNumberOfConnections); } }
//static int s_AcquiredArgs; //static int s_ReleasedArgs; //static int s_OutstandingArgs; static SocketHelpers() { if (!ObjectPoolMgr.ContainsType <SocketAsyncEventArgs>()) { ObjectPoolMgr.RegisterType <SocketAsyncEventArgs>(CreateSocketArg); // TODO: have the minimum value set in config or find an appropriate minimum. ObjectPoolMgr.SetMinimumSize <SocketAsyncEventArgs>(100); } }
public static SocketAsyncEventArgs AcquireSocketArg() { //Interlocked.Increment(ref s_OutstandingArgs); //Interlocked.Increment(ref s_AcquiredArgs); //Console.WriteLine("Acquiring SocketAsyncEventArg {0}:{1}", s_OutstandingArgs, s_AcquiredArgs); SocketAsyncEventArgs args = ObjectPoolMgr.ObtainObject <SocketAsyncEventArgs>(); CleanSocketArg(args); return(args); }
private static void OnSendCompleted(object sender, SocketAsyncEventArgs args) { args.Completed -= OnSendCompleted; var stream = args.UserToken as SegmentStream; if (stream != null) { stream.Dispose(); } ObjectPoolMgr.ReleaseObject((PoolableSocketArgs)args); }
private void Awake() { if (_instance == null) { _instance = this; } // 인스턴스가 존재하는 경우 새로생기는 인스턴스를 삭제한다. else if (_instance != this) { Destroy(gameObject); } // 아래의 함수를 사용하여 씬이 전환되더라도 선언되었던 인스턴스가 파괴되지 않는다. DontDestroyOnLoad(gameObject); }
public void Send(SegmentStream stream) { if (this.Socket != null && this.Connected) { SocketAsyncEventArgs socketAsyncEventArgs = ObjectPoolMgr.ObtainObject <SocketAsyncEventArgs>(); socketAsyncEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(this.OnSendCompleted); socketAsyncEventArgs.SetBuffer(stream.Segment.Buffer.Array, stream.Segment.Offset, (int)stream.Position); socketAsyncEventArgs.UserToken = stream; if (!this.Socket.SendAsync(socketAsyncEventArgs)) { socketAsyncEventArgs.Completed -= new EventHandler <SocketAsyncEventArgs>(this.OnSendCompleted); stream.Dispose(); ObjectPoolMgr.ReleaseObject <SocketAsyncEventArgs>(socketAsyncEventArgs); } this.LastActivity = DateTime.Now; } }
public void Initialize(ClientManager.CreateClientHandler createClientHandler) { if (this.IsInitialized) { throw new Exception("ClientManager already initialized"); } if (!ObjectPoolMgr.ContainsType <SocketAsyncEventArgs>()) { ObjectPoolMgr.RegisterType <SocketAsyncEventArgs>(() => new SocketAsyncEventArgs()); ObjectPoolMgr.SetMinimumSize <SocketAsyncEventArgs>(100); } this.m_createClientDelegate = createClientHandler; this.m_semaphore = new SemaphoreSlim(ClientManager.MaxConcurrentConnections, ClientManager.MaxConcurrentConnections); this.m_acceptArgs.Completed += delegate(object sender, SocketAsyncEventArgs e) { this.ProcessAccept(e); }; this.IsInitialized = true; }
void Awake() { if (instance == null) { instance = this; } else if (instance != this) { Destroy(gameObject); } //如果没有进行过初始化,先初始化创建池中的对象 if (!_binit) { _init(); _binit = true; } DontDestroyOnLoad(gameObject); }
public void Initialize(CreateClientHandler createClientHandler) { if (IsInitialized) { throw new Exception("ClientManager already initialized"); } if (!ObjectPoolMgr.ContainsType <PoolableSocketArgs>()) { ObjectPoolMgr.RegisterType(() => new PoolableSocketArgs()); ObjectPoolMgr.SetMinimumSize <PoolableSocketArgs>(MaxConcurrentConnections); } m_createClientDelegate = createClientHandler; // init semaphore m_semaphore = new SemaphoreSlim(MaxConcurrentConnections, MaxConcurrentConnections); m_acceptArgs.Completed += (sender, e) => ProcessAccept(e); IsInitialized = true; }
public void PushSocketArg(PoolableSocketArgs args) { ObjectPoolMgr.ReleaseObject(args); }
public PoolableSocketArgs PopSocketArg() { var arg = ObjectPoolMgr.ObtainObject <PoolableSocketArgs>(); return(arg); }
//ect........... #endregion private void Awake() { inst = this; InitObjectPool(); }
public void PushSocketArg(SocketAsyncEventArgs args) { ObjectPoolMgr.ReleaseObject <SocketAsyncEventArgs>(args); }
public SocketAsyncEventArgs PopSocketArg() { return(ObjectPoolMgr.ObtainObject <SocketAsyncEventArgs>()); }
private void OnSendCompleted(object sender, SocketAsyncEventArgs e) { e.Completed -= new EventHandler <SocketAsyncEventArgs>(this.OnSendCompleted); ((SegmentStream)e.UserToken).Dispose(); ObjectPoolMgr.ReleaseObject <SocketAsyncEventArgs>(e); }
public static void ReleaseSocketArg(SocketAsyncEventArgs arg) { ObjectPoolMgr.ReleaseObject(arg); }
void Awake() { instance = this; m_PooledObject = new Dictionary <string, List <GameObject> >(); m_Directory_PooledObject = transform.GetChild(2); //Initializing Position (포지션을 할당해 놓는다.) Transform Directory_PoolingPos = transform.GetChild(1); m_PoolingPos = new Vector3[Directory_PoolingPos.childCount]; for (int i = 0; i < m_PoolingPos.Length; i++) { m_PoolingPos[i] = Directory_PoolingPos.GetChild(i).position; } //AddObjectToPool------------------------------------------- //Zomebie(Businessman) AddObjectToPool(0, 50, ObjType.OBJ_ENEMY, false); //Particle(FX_BloodSplatter_Katana) AddObjectToPool(1, 20, ObjType.OBJ_ETC, true); //Bullet AddObjectToPool(2, 20, ObjType.OBJ_BULLET, true); //Particle(FX_BloodSplatter_Bullet) AddObjectToPool(3, 50, ObjType.OBJ_ETC, true); //Zomebie(SA_Zombie_RoadWorker) AddObjectToPool(4, 50, ObjType.OBJ_ENEMY, false); //DropHeart AddObjectToPool(5, 20, ObjType.OBJ_ETC, true); //DropAmmo AddObjectToPool(6, 10, ObjType.OBJ_ETC, true); //Flame AddObjectToPool(7, 10, ObjType.OBJ_ETC, true); //ExplosionParticle AddObjectToPool(8, 10, ObjType.OBJ_ETC, true); //Devil Zombie AddObjectToPool(9, 10, ObjType.OBJ_ENEMY, false); //Rugby Zombie AddObjectToPool(10, 10, ObjType.OBJ_ENEMY, false); //PrisonerZombie AddObjectToPool(11, 10, ObjType.OBJ_ENEMY, false); //SoldierZombie AddObjectToPool(12, 10, ObjType.OBJ_ENEMY, false); //Zomebie(Normal3) AddObjectToPool(13, 50, ObjType.OBJ_ENEMY, false); //Zomebie(Normal4) AddObjectToPool(14, 50, ObjType.OBJ_ENEMY, false); //Zomebie(Normal5) AddObjectToPool(15, 50, ObjType.OBJ_ENEMY, false); //Rocket AddObjectToPool(16, 3, ObjType.OBJ_BULLET, true); //SniperBullet AddObjectToPool(17, 5, ObjType.OBJ_BULLET, true); //Bullet Impact_Concrete AddObjectToPool(18, 100, ObjType.OBJ_ETC, false); m_ParticleOrderList.Add("WFXMR_BImpact Concrete + Hole Unlit", new ParticleOrderList()); //Bullet Impact_Dirt AddObjectToPool(19, 100, ObjType.OBJ_ETC, false); m_ParticleOrderList.Add("WFXMR_BImpact Dirt + Hole", new ParticleOrderList()); //Soldier Zombie Bullet AddObjectToPool(20, 10, ObjType.OBJ_BULLET, true); //Soldier Zombie Bullet AddObjectToPool(21, 5, ObjType.OBJ_COLLEAGUE, true); //Flame Collider AddObjectToPool(22, 9, ObjType.OBJ_BULLET, false); }