/// <summary> /// on received /// </summary> /// <param name="session"></param> /// <param name="cmdInfo"></param> public override void OnReceived(UdpSession session, TCommandInfo cmdInfo) { if (string.IsNullOrEmpty(cmdInfo.CmdName)) { return; } ThreadPool.QueueUserWorkItem(_ => { Command.IUdpCommand <TCommandInfo> cmd = null; this._dicCommand.TryGetValue(cmdInfo.CmdName, out cmd); try { if (cmd == null) { this.HandleUnKnowCommand(session, cmdInfo); } else { cmd.ExecuteCommand(session, cmdInfo); } } catch (Exception ex) { this.OnCommandExecException(session, cmdInfo, ex); } }); }
/// <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; try { if (this._protocolHandler.TryParse(new ArraySegment <byte>(e.Buffer, 0, e.BytesTransferred), out message)) { this._service.OnReceived(session, message); } } catch (Exception ex) { SocketBase.Log.Trace.Error(ex.Message, ex); this._service.OnError(session, ex); } } //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) { }
/// <summary> /// OnReceived /// </summary> /// <param name="session"></param> /// <param name="cmdInfo"></param> public virtual void OnReceived(UdpSession session, TCommandInfo cmdInfo) { }
/// <summary> /// on command exec exception /// </summary> /// <param name="session"></param> /// <param name="cmdInfo"></param> /// <param name="ex"></param> protected virtual void OnCommandExecException(UdpSession session, TCommandInfo cmdInfo, Exception ex) { }
/// <summary> /// handle unknow command. /// </summary> /// <param name="session"></param> /// <param name="commandInfo"></param> protected virtual void HandleUnKnowCommand(UdpSession session, TCommandInfo commandInfo) { }