Exemple #1
0
        /// <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,
            });
        }
Exemple #2
0
        /// <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);
            }
        }