@@ -50,7 +50,6 @@ type MServer struct {
5050 Sender * packet.PacketSender
5151 ClientMap map [base.CommandKey ]* shexec.ClientProc
5252 Debug bool
53- StateMap * ShellStateMap
5453 WriteErrorCh chan bool // closed if there is a I/O write error
5554 WriteErrorChOnce * sync.Once
5655 Done bool
@@ -338,11 +337,6 @@ func (m *MServer) reinit(reqId string, shellType string) {
338337 m .Sender .SendErrorResponse (reqId , fmt .Errorf ("error initializing shell: %w" , err ))
339338 return
340339 }
341- err = m .StateMap .SetCurrentState (ssPk .State .GetShellType (), ssPk .State )
342- if err != nil {
343- m .Sender .SendErrorResponse (reqId , fmt .Errorf ("error setting current state: %w" , err ))
344- return
345- }
346340 ssPk .RespId = reqId
347341 m .Sender .SendPacket (ssPk )
348342}
@@ -710,33 +704,30 @@ func (m *MServer) ProcessRpcPacket(pk packet.RpcPacketType) {
710704 m .Sender .SendErrorResponse (reqId , fmt .Errorf ("invalid rpc type '%s'" , pk .GetType ()))
711705}
712706
713- func (m * MServer ) clientPacketCallback (shellType string , pk packet.PacketType ) {
707+ func (m * MServer ) clientPacketCallback (shellType string , pk packet.PacketType , runPk * packet. RunPacketType ) {
714708 if pk .GetType () != packet .CmdDonePacketStr {
715709 return
716710 }
717711 donePk := pk .(* packet.CmdDonePacketType )
718712 if donePk .FinalState == nil {
719713 return
720714 }
721- stateHash , curState := m . StateMap . GetCurrentState ( shellType )
722- if curState == nil {
715+ initialState := runPk . State
716+ if initialState == nil {
723717 return
724718 }
725- sapi , err := shellapi .MakeShellApi (curState .GetShellType ())
719+ initialStateHash := initialState .GetHashVal (false )
720+ sapi , err := shellapi .MakeShellApi (initialState .GetShellType ())
726721 if err != nil {
727722 return
728723 }
729- diff , err := sapi .MakeShellStateDiff (curState , stateHash , donePk .FinalState )
724+ diff , err := sapi .MakeShellStateDiff (initialState , initialStateHash , donePk .FinalState )
730725 if err != nil {
731726 return
732727 }
733728 donePk .FinalState = nil
734729 donePk .FinalStateDiff = diff
735- }
736-
737- func (m * MServer ) isShellInitialized (shellType string ) bool {
738- _ , curState := m .StateMap .GetCurrentState (shellType )
739- return curState != nil
730+ donePk .FinalStateBasePtr = runPk .StatePtr
740731}
741732
742733func (m * MServer ) runCommand (runPacket * packet.RunPacketType ) {
@@ -786,7 +777,7 @@ func (m *MServer) runCommand(runPacket *packet.RunPacketType) {
786777 }()
787778 shexec .SendRunPacketAndRunData (context .Background (), cproc .Input , runPacket )
788779 cproc .ProxySingleOutput (runPacket .CK , m .Sender , func (pk packet.PacketType ) {
789- m .clientPacketCallback (runPacket .ShellType , pk )
780+ m .clientPacketCallback (runPacket .ShellType , pk , runPacket )
790781 })
791782 }()
792783}
@@ -849,7 +840,6 @@ func RunServer() (int, error) {
849840 server := & MServer {
850841 Lock : & sync.Mutex {},
851842 ClientMap : make (map [base.CommandKey ]* shexec.ClientProc ),
852- StateMap : MakeShellStateMap (),
853843 Debug : debug ,
854844 WriteErrorCh : make (chan bool ),
855845 WriteErrorChOnce : & sync.Once {},
0 commit comments