64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package hodu
|
|
|
|
import "fmt"
|
|
|
|
// Rpx
|
|
func (cts *ServerConn) StartRpxWebById(srpx* ServerRpx, id uint64, data []byte) error {
|
|
// pass the initial response to code in server-rpx.go
|
|
srpx.start_chan <- data
|
|
return nil
|
|
}
|
|
|
|
func (cts *ServerConn) StopRpxWebById(srpx* ServerRpx, id uint64) error {
|
|
cts.S.log.Write(cts.Sid, LOG_DEBUG, "Requesting to stop rpx(%d)", srpx.id)
|
|
srpx.ReqStop(true)
|
|
cts.S.log.Write(cts.Sid, LOG_DEBUG, "Requested to stop rpx(%d)", srpx.id)
|
|
return nil
|
|
}
|
|
|
|
func (cts *ServerConn) WriteRpxWebById(srpx* ServerRpx, id uint64, data []byte) error {
|
|
var err error
|
|
_, err = srpx.pw.Write(data)
|
|
if err != nil {
|
|
cts.S.log.Write(cts.Sid, LOG_ERROR, "Failed to write rpx data(%d) to rpx pipe - %s", id, err.Error())
|
|
srpx.ReqStop(true)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (cts *ServerConn) EofRpxWebById(srpx* ServerRpx, id uint64) error {
|
|
srpx.ReqStop(false)
|
|
return nil
|
|
}
|
|
|
|
func (cts *ServerConn) HandleRpxEvent(packet_type PACKET_KIND, evt *RpxEvent) error {
|
|
var ok bool
|
|
var rpx* ServerRpx
|
|
|
|
cts.rpx_mtx.Lock()
|
|
rpx, ok = cts.rpx_map[evt.Id]
|
|
if !ok {
|
|
cts.rpx_mtx.Unlock()
|
|
return fmt.Errorf("unknown rpx id - %v", evt.Id)
|
|
}
|
|
cts.rpx_mtx.Unlock()
|
|
|
|
switch packet_type {
|
|
case PACKET_KIND_RPX_START:
|
|
return cts.StartRpxWebById(rpx, evt.Id, evt.Data)
|
|
|
|
case PACKET_KIND_RPX_STOP:
|
|
// stop requested from the server
|
|
return cts.StopRpxWebById(rpx, evt.Id)
|
|
|
|
case PACKET_KIND_RPX_EOF:
|
|
return cts.EofRpxWebById(rpx, evt.Id)
|
|
|
|
case PACKET_KIND_RPX_DATA:
|
|
return cts.WriteRpxWebById(rpx, evt.Id, evt.Data)
|
|
}
|
|
|
|
// ignore other packet types
|
|
return nil
|
|
}
|