implement reinit, also do not store 'columns' var

This commit is contained in:
sawka
2022-10-27 21:59:17 -07:00
parent e5d2267f27
commit 1da450e61c
4 changed files with 35 additions and 0 deletions
+19
View File
@@ -79,12 +79,14 @@ func init() {
TypeStrToFactory[DataAckPacketStr] = reflect.TypeOf(DataAckPacketType{})
TypeStrToFactory[DataEndPacketStr] = reflect.TypeOf(DataEndPacketType{})
TypeStrToFactory[CompGenPacketStr] = reflect.TypeOf(CompGenPacketType{})
TypeStrToFactory[ReInitPacketStr] = reflect.TypeOf(ReInitPacketType{})
var _ RpcPacketType = (*RunPacketType)(nil)
var _ RpcPacketType = (*GetCmdPacketType)(nil)
var _ RpcPacketType = (*UntailCmdPacketType)(nil)
var _ RpcPacketType = (*CdPacketType)(nil)
var _ RpcPacketType = (*CompGenPacketType)(nil)
var _ RpcPacketType = (*ReInitPacketType)(nil)
var _ RpcResponsePacketType = (*CmdStartPacketType)(nil)
var _ RpcResponsePacketType = (*ResponsePacketType)(nil)
@@ -332,6 +334,23 @@ func MakeCdPacket() *CdPacketType {
return &CdPacketType{Type: CdPacketStr}
}
type ReInitPacketType struct {
Type string `json:"type"`
ReqId string `json:"reqid"`
}
func (*ReInitPacketType) GetType() string {
return ReInitPacketStr
}
func (p *ReInitPacketType) GetReqId() string {
return p.ReqId
}
func MakeReInitPacket() *ReInitPacketType {
return &ReInitPacketType{Type: ReInitPacketStr}
}
type CompGenPacketType struct {
Type string `json:"type"`
ReqId string `json:"reqid"`
+1
View File
@@ -169,6 +169,7 @@ func MakePacketParser(input io.Reader) *PacketParser {
}
// ##[len][json]\n
// ##14{"hello":true}\n
// ##N{...}
bracePos := strings.Index(line, "{")
if !strings.HasPrefix(line, "##") || bracePos == -1 {
parser.MainCh <- MakeRawPacket(line[:len(line)-1])
+14
View File
@@ -137,6 +137,16 @@ func (m *MServer) runCompGen(compPk *packet.CompGenPacketType) {
return
}
func (m *MServer) reinit(reqId string) {
initPk, err := shexec.MakeServerInitPacket()
if err != nil {
m.Sender.SendErrorResponse(reqId, fmt.Errorf("error creating init packet: %w", err))
return
}
initPk.RespId = reqId
m.Sender.SendPacket(initPk)
}
func (m *MServer) ProcessRpcPacket(pk packet.RpcPacketType) {
reqId := pk.GetReqId()
if cdPk, ok := pk.(*packet.CdPacketType); ok {
@@ -152,6 +162,10 @@ func (m *MServer) ProcessRpcPacket(pk packet.RpcPacketType) {
go m.runCompGen(compPk)
return
}
if _, ok := pk.(*packet.ReInitPacketType); ok {
go m.reinit(reqId)
return
}
m.Sender.SendErrorResponse(reqId, fmt.Errorf("invalid rpc type '%s'", pk.GetType()))
return
}
+1
View File
@@ -101,6 +101,7 @@ var NoStoreVarNames = map[string]bool{
"HISTSIZE": true,
"HISTTIMEFORMAT": true,
"SRANDOM": true,
"COLUMNS": true,
// we want these in our remote state object
// "EUID": true,