/// <summary> /// リクエストを型付けするためのメソッドです。 /// </summary> private IPbResponse HandleRequestInternal <TReq, TRes>( PbRequestHandler <TReq, TRes> handler, object requestObj) where TRes : class { var e = new PbRequestEventArgs <TReq, TRes>((TReq)requestObj); handler(this, e); return(new PbResponse <TRes>() { Response = e.Response, ErrorCode = e.ErrorCode, }); }
/// <summary> /// T型のリクエストを処理するハンドラを追加します。 /// </summary> public void AddRequestHandler <TReq, TRes>(PbRequestHandler <TReq, TRes> handler, bool isOutLog = true) where TRes : class { if (handler == null) { return; } lock (this.handlerDic) { var handlerInfo = new HandlerInfo() { Type = typeof(TReq), ResponseType = typeof(TRes), Handler = (requestObj) => HandleRequestInternal(handler, requestObj), IsOutLog = isOutLog, }; this.handlerDic.Add(typeof(TReq), handlerInfo); } }