mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-22 16:48:23 +01:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
// Copyright 2024, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package wshprc
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
const (
|
|
MaxOpenRpcs = 10
|
|
MaxUnackedPerRpc = 10
|
|
MaxInFlightPackets = MaxOpenRpcs * MaxUnackedPerRpc
|
|
)
|
|
|
|
const (
|
|
RpcType_Req = "req"
|
|
RpcType_Resp = "resp"
|
|
)
|
|
|
|
const (
|
|
CommandType_Ack = ":ack"
|
|
CommandType_Ping = ":ping"
|
|
CommandType_Cancel = ":cancel"
|
|
CommandType_Timeout = ":timeout"
|
|
)
|
|
|
|
var rpcClientContextKey = struct{}{}
|
|
|
|
type TimeoutInfo struct {
|
|
Deadline int64 `json:"deadline,omitempty"`
|
|
ReqPacketTimeout int64 `json:"reqpackettimeout,omitempty"` // for streaming requests
|
|
RespPacketTimeout int64 `json:"resppackettimeout,omitempty"` // for streaming responses
|
|
}
|
|
|
|
type RpcPacket struct {
|
|
Command string `json:"command"`
|
|
RpcId string `json:"rpcid"`
|
|
RpcType string `json:"rpctype"`
|
|
SeqNum int64 `json:"seqnum"`
|
|
ReqDone bool `json:"reqdone"`
|
|
RespDone bool `json:"resdone"`
|
|
Acks []int64 `json:"acks,omitempty"` // seqnums acked
|
|
Timeout *TimeoutInfo `json:"timeout,omitempty"` // for initial request only
|
|
Data any `json:"data"` // json data for command
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
func GetRpcClient(ctx context.Context) *RpcClient {
|
|
if ctx == nil {
|
|
return nil
|
|
}
|
|
val := ctx.Value(rpcClientContextKey)
|
|
if val == nil {
|
|
return nil
|
|
}
|
|
return val.(*RpcClient)
|
|
}
|