/// <summary> /// completed handle /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ReceiveCompleted(object sender, SocketAsyncEventArgs e) { if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { var session = new UdpSession(e.RemoteEndPoint, this); TMessage message = null; try { message = this._protocol.Parse(new ArraySegment<byte>(e.Buffer, 0, e.BytesTransferred)); } catch (Exception ex) { XzySocketBase.Log.Trace.Error(ex.Message, ex); this._service.OnError(session, ex); } if (message != null) this._service.OnReceived(session, message); } //receive again this.BeginReceive(e); }
/// <summary> /// on error /// </summary> /// <param name="session"></param> /// <param name="ex"></param> public virtual void OnError(UdpSession session, Exception ex) { }
/// <summary> /// on message received /// </summary> /// <param name="session"></param> /// <param name="message"></param> public virtual void OnReceived(UdpSession session, TMessage message) { }