private void GetAccepted(UniNetObject AcceptedUniObject) { if (AcceptedUniObject.ObjectError != Error.NetCoreError.Success) { StartAccept(AcceptedUniObject); return; } NetCore.Error.NetCoreException err; UniNetObject clientUniObject = new UniNetObject(); clientUniObject.SetProtocol(_Callback._ProtocolOp); _BufferManager.SetBuffer(clientUniObject.SetBuffer, 4096); clientUniObject.SetCompletedHandler(ProcessIO); clientUniObject = _Callback._ProtocolOp.GetAcceptedUniObject(AcceptedUniObject, ref clientUniObject); _Callback.Accepted(clientUniObject, out err); if (clientUniObject.BufferLength != 0) { _Callback.Received(clientUniObject.Buffer, clientUniObject, out err, clientUniObject.stateObject); } clientUniObject.BufferLength = 0; if (err != null) { //ProcessBadConnection(uniObject); StartAccept(AcceptedUniObject); return; } //var clientArgs=_ConnectPool.Pop(); //clientArgs.UserToken=new SocketStateObject(clientSocket); clientUniObject.LastOperation = UniNetOperation.Receive; if (!clientUniObject.ReceiveAsync(clientUniObject)) { ProcessReceive(clientUniObject); } clientUniObject.ObjectError = Error.NetCoreError.IOPending; StartAccept(AcceptedUniObject); }
//[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] private void ProcessConnected(SocketAsyncEventArgs connectionArgs) { NetCore.Error.NetCoreException err; var state = _Callback.Connected(connectionArgs.ConnectSocket, out err); if (err != null) { connectionArgs.Dispose(); return; } connectionArgs.UserToken = new SocketStateObject(connectionArgs.ConnectSocket, state); _BufferManager.SetBuffer(connectionArgs.SetBuffer, 4096); if (!connectionArgs.ConnectSocket.ReceiveAsync(connectionArgs)) { ProcessReceive(connectionArgs); } }
public override void SetServer(string ip, int port, CallbackCollection callbackCollection, int MAX_LISTEN) { _BufferManager = new SimpleBuffer(); //_BufferManager = new MicrosoftBuffer(4096 * 10, 4096); _ConnectPool = new SocketAsyncPool(); _ConnectPool.Init(MAX_LISTEN); for (int i = 0; i < MAX_LISTEN; i++) { SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler <SocketAsyncEventArgs>(ProcessIO); //byte[] buf = new byte[4096]; _BufferManager.SetBuffer(args.SetBuffer, 4096); _ConnectPool.InitPush(args); } _IpAddress = ip != null? IPAddress.Parse(ip) : IPAddress.Any; _Port = port; _MAX_LISTEN = MAX_LISTEN; _Callback = callbackCollection; _Type = CoreType.Server; }