MCPcopy
hub / github.com/TarsCloud/TarsGo / Dispatch

Method Dispatch

tars/protocol/res/nodef/ServerF.tars.go:486–878  ·  view source on GitHub ↗

Dispatch is used to call the server side implement for the method defined in the tars file. withContext shows using context or not.

(tarsCtx context.Context, val interface{}, tarsReq *requestf.RequestPacket, tarsResp *requestf.ResponsePacket, withContext bool)

Source from the content-addressed store, hash-verified

484
485// Dispatch is used to call the server side implement for the method defined in the tars file. withContext shows using context or not.
486func (obj *ServerF) Dispatch(tarsCtx context.Context, val interface{}, tarsReq *requestf.RequestPacket, tarsResp *requestf.ResponsePacket, withContext bool) (err error) {
487 var (
488 length int32
489 have bool
490 ty byte
491 )
492 readBuf := codec.NewReader(tools.Int8ToByte(tarsReq.SBuffer))
493 buf := codec.NewBuffer()
494 switch tarsReq.SFuncName {
495 case "keepAlive":
496 var serverInfo ServerInfo
497 if tarsReq.IVersion == basef.TARSVERSION {
498 err = serverInfo.ReadBlock(readBuf, 1, true)
499 if err != nil {
500 return err
501 }
502 } else if tarsReq.IVersion == basef.TUPVERSION {
503 reqTup := tup.NewUniAttribute()
504 reqTup.Decode(readBuf)
505
506 var tupBuffer []byte
507
508 reqTup.GetBuffer("serverInfo", &tupBuffer)
509 readBuf.Reset(tupBuffer)
510 err = serverInfo.ReadBlock(readBuf, 0, true)
511 if err != nil {
512 return err
513 }
514 } else if tarsReq.IVersion == basef.JSONVERSION {
515 var jsonData map[string]interface{}
516 decoder := json.NewDecoder(bytes.NewReader(readBuf.ToBytes()))
517 decoder.UseNumber()
518 err = decoder.Decode(&jsonData)
519 if err != nil {
520 return fmt.Errorf("decode reqpacket failed, error: %+v", err)
521 }
522 {
523 jsonStr, _ := json.Marshal(jsonData["serverInfo"])
524 serverInfo.ResetDefault()
525 if err = json.Unmarshal(jsonStr, &serverInfo); err != nil {
526 return err
527 }
528 }
529 } else {
530 err = fmt.Errorf("decode reqpacket fail, error version: %d", tarsReq.IVersion)
531 return err
532 }
533
534 var funRet int32
535 if !withContext {
536 imp := val.(ServerFServant)
537 funRet, err = imp.KeepAlive(&serverInfo)
538 } else {
539 imp := val.(ServerFServantWithContext)
540 funRet, err = imp.KeepAlive(tarsCtx, &serverInfo)
541 }
542 if err != nil {
543 return err

Callers

nothing calls this directly

Calls 15

ReadBlockMethod · 0.95
DecodeMethod · 0.95
GetBufferMethod · 0.95
ResetMethod · 0.95
ToBytesMethod · 0.95
ResetDefaultMethod · 0.95
ResetMethod · 0.95
WriteInt32Method · 0.95
PutBufferMethod · 0.95
ToBytesMethod · 0.95
EncodeMethod · 0.95
WriteSliceUint8Method · 0.95

Tested by

no test coverage detected