github.com/cloudwego/kitex@v0.9.0/pkg/remote/trans/invoke/invoke_handler.go (about) 1 /* 2 * Copyright 2021 CloudWeGo Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package invoke 18 19 import ( 20 "context" 21 22 "github.com/cloudwego/kitex/pkg/remote" 23 ) 24 25 // Handler is used to Call a Message. 26 type Handler interface { 27 Call(Message) error 28 } 29 30 type ivkHandler struct { 31 opt *remote.ServerOption 32 transHdlr remote.ServerTransHandler 33 } 34 35 // NewIvkHandler creates a invoker handler. 36 func NewIvkHandler(opt *remote.ServerOption, transHdlr remote.ServerTransHandler) (Handler, error) { 37 return &ivkHandler{ 38 opt: opt, 39 transHdlr: transHdlr, 40 }, nil 41 } 42 43 // Call implements the Handler interface. 44 func (s *ivkHandler) Call(msg Message) (err error) { 45 ctx := context.Background() 46 // do onConnActive 47 ctx, err = s.transHdlr.OnActive(ctx, msg) 48 if err != nil { 49 s.transHdlr.OnError(ctx, err, msg) 50 s.transHdlr.OnInactive(ctx, msg) 51 return 52 } 53 // do onConnRead 54 err = s.transHdlr.OnRead(ctx, msg) 55 if err != nil { 56 s.transHdlr.OnError(ctx, err, msg) 57 s.transHdlr.OnInactive(ctx, msg) 58 return 59 } 60 // do onConnInactive 61 s.transHdlr.OnInactive(ctx, msg) 62 return 63 }