- 1 private void ProcessReceive(IAsyncResult ar) 2 {
- 3
- var user = (UserToken) ar.AsyncState;
- 4
- var remote = user.Client;
- 5
- try 6 {
- 7
- if (remote.Connected) 8 {
- 9
- var ns = remote.EndReceive(ar);
- 10 11
- if (ns > 0) 12 {
- 13
- var buffer = new byte[ns];
- 14 15 Buffer.BlockCopy(user.ReceiveBuffer, 0, buffer, 0, buffer.Length);
- 16 17 user.UnPackage(buffer, (p) = >18 {
- 19 Interlocked.Increment(ref this._receiveCount);
- 20 this.RaiseOnOnReceived(user, p);
- 21
- });
- 22 23 user.ClearReceiveBuffer();
- 24 25 buffer = null;
- 26 27 remote.BeginReceive(user.ReceiveBuffer, 0, user.ReceiveBuffer.Length, SocketFlags.None, new AsyncCallback(ProcessReceive), user);
- 28
- }
- 29
- }
- 30
- else 31 {
- 32 this.RaiseOnDisConnected(user, new Exception("客户端已断开连接"));
- 33 this.CloseClient(user);
- 34
- }
- 35
- }
- 36
- catch(SocketException sex) 37 {
- 38 this.RaiseOnDisConnected(user, sex);
- 39 this.CloseClient(user);
- 40
- }
- 41
- catch(Exception ex) 42 {
- 43 this.RaiseOnError(user, ex);
- 44 this.CloseClient(user);
- 45
- }
- 46
- }
来源: