コード例 #1
0
        // 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*/);
        }
コード例 #2
0
        // 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*/);
        }
コード例 #3
0
        // 받은 내용을 어떻게 처리할지는 이 함수를 재정의해서 처리하시오!
        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);
        }
コード例 #4
0
        // 받은 내용을 어떻게 처리할지는 이 함수를 재정의해서 처리하시오!
        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);
        }
コード例 #5
0
        // 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);
            //}
        }
コード例 #6
0
 public AsyncIOWorker(INetworkReceiver receiver, AsyncIOManager asio)
 {
     NetReceiver = receiver;
     IOManager   = asio;
 }
 public ASNetService(INetworkReceiver receiver, ASIOManager asio)
 {
     theReceiver = receiver;
     asiomanager = asio;
 }
コード例 #8
0
 public UdpMessageListener(int port)
 {
     reader = UdpNetworkFactory.MakeUdpReceiver <E>(port);
 }
 public AsyncNetService(INetworkReceiver receiver, AsyncIOManager asio)
 {
     NetReceiver = receiver;
     AsioManager = asio;
 }