// io * maxconnect * multiple 만큼 버퍼가 할당됩니다. public AsyncIOManager(int cnt, INetworkReceiver receiver, int io, int maxconnect, int multiple) { if (Min_NetContainer > cnt) { cnt = Min_NetContainer; } if (Max_NetContainer < cnt) { cnt = Max_NetContainer; } MaxCount = cnt; theReceiver = receiver; for (long index = 1; index <= MaxCount; index++) { AsyncNetService theone = new AsyncNetService(theReceiver, this); theone.idx = index; NetServices.Add(index, theone); } CurrentId = 1; IOSize = io; IOFrameMax = maxconnect * multiple; BufferManager = new BufferManager(IOSize * IOFrameMax, IOSize); BufferManager.InitBuffer(); EventArgsPool = new SocketAsyncEventArgsPool(/*ioframemax*/); }
// io * maxconnect * multiple 만큼 버퍼가 할당됩니다. public AsyncIOManager(int ioWorkerCount, INetworkReceiver receiver, int maxIOBufferSize, int maxConnectCount, int multiple) { theReceiver = receiver; MaxCount = ioWorkerCount; if (MaxCount < 1) { MaxCount = System.Environment.ProcessorCount; } for (int index = 1; index <= MaxCount; index++) { AsyncIOWorker theone = new AsyncIOWorker(theReceiver, this); theone.Index = index; AddIOWorker(theone); } CurrentId = 1; IOSize = maxIOBufferSize; IOFrameMax = maxConnectCount * multiple; BufferManager = new BufferManagerAsync(IOSize * IOFrameMax, IOSize); BufferManager.InitBuffer(); EventArgsPool = new SocketAsyncEventArgsPool(/*ioframemax*/); }
// 받은 내용을 어떻게 처리할지는 이 함수를 재정의해서 처리하시오! public virtual void handleReceived(int length, byte[] data, int offset, INetworkReceiver receiver) { // todo 보통 아래 receiver.notifyMessage 함수에서 프로토콜에 맞는 객체를 생성하면 될것이다. // 생성은 쓰레드제어없이 가능하게하고, enqueuing을 쓰레드제어하면 된다. // 객체파괴가 어떻게 일어날지 모르니, desc는 값을 복사해서 사용하자. ASSOCKDESC desc = new ASSOCKDESC(); desc.createTick = theDESC.createTick; desc.managedID = theDESC.managedID; desc.theSender = theDESC.theSender; receiver.notifyMessage(desc, length, data, offset); }
// 받은 내용을 어떻게 처리할지는 이 함수를 재정의해서 처리하시오! public virtual void HandleReceived(int length, byte[] data, int offset, INetworkReceiver receiver) { //TODO 구현이 좀 이상한듯 // 보통 아래 receiver.notifyMessage 함수에서 프로토콜에 맞는 객체를 생성하면 될것이다. // 생성은 쓰레드제어없이 가능하게하고, enqueuing을 쓰레드제어하면 된다. // 객체파괴가 어떻게 일어날지 모르니, desc는 값을 복사해서 사용하자. AsyncSocketContext desc = new AsyncSocketContext(); desc.UniqueId = Description.UniqueId; desc.ManagedID = Description.ManagedID; desc.NetSender = Description.NetSender; receiver.OnReceiveData(desc, length, data, offset); }
// io * maxconnect * multiple 만큼 버퍼가 할당됩니다. public ASIOManager(int cnt, INetworkReceiver receiver, int io, int maxconnect, int multiple) { if (Min_NetContainer > cnt) { cnt = Min_NetContainer; } if (Max_NetContainer < cnt) { cnt = Max_NetContainer; } maxcnt = cnt; theReceiver = receiver; for (long index = 1; index <= maxcnt; index++) { ASNetService theone = new ASNetService(theReceiver, this); theone.idx = index; theServices.Add(index, theone); } currentid = 1; iosize = io; ioframemax = maxconnect * multiple; buffermanager = new BufferManager(iosize * ioframemax, iosize); buffermanager.InitBuffer(); saeaPool = new SocketAsyncEventArgsPool(ioframemax); //SocketAsyncEventArgs saea; //for (int i = 0; i < ioframemax; i++) //{ // // completed와 usertoken은 실제 사용하는 문맥에서 결정한다. // saea = new SocketAsyncEventArgs(); // buffermanager.SetBuffer(saea); // saeaPool.Push(saea); //} }
public AsyncIOWorker(INetworkReceiver receiver, AsyncIOManager asio) { NetReceiver = receiver; IOManager = asio; }
public ASNetService(INetworkReceiver receiver, ASIOManager asio) { theReceiver = receiver; asiomanager = asio; }
public UdpMessageListener(int port) { reader = UdpNetworkFactory.MakeUdpReceiver <E>(port); }
public AsyncNetService(INetworkReceiver receiver, AsyncIOManager asio) { NetReceiver = receiver; AsioManager = asio; }