You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
package datagramsession |
|
|
|
import ( |
|
"fmt" |
|
"io" |
|
|
|
"github.com/google/uuid" |
|
) |
|
|
|
// registerSessionEvent is an event to start tracking a new session |
|
type registerSessionEvent struct { |
|
sessionID uuid.UUID |
|
originProxy io.ReadWriteCloser |
|
resultChan chan *Session |
|
} |
|
|
|
func newRegisterSessionEvent(sessionID uuid.UUID, originProxy io.ReadWriteCloser) *registerSessionEvent { |
|
return ®isterSessionEvent{ |
|
sessionID: sessionID, |
|
originProxy: originProxy, |
|
resultChan: make(chan *Session, 1), |
|
} |
|
} |
|
|
|
// unregisterSessionEvent is an event to stop tracking and terminate the session. |
|
type unregisterSessionEvent struct { |
|
sessionID uuid.UUID |
|
err *errClosedSession |
|
} |
|
|
|
// ClosedSessionError represent a condition that closes the session other than I/O |
|
// I/O error is not included, because the side that closes the session is ambiguous. |
|
type errClosedSession struct { |
|
message string |
|
byRemote bool |
|
} |
|
|
|
func (sc *errClosedSession) Error() string { |
|
if sc.byRemote { |
|
return fmt.Sprintf("session closed by remote due to %s", sc.message) |
|
} else { |
|
return fmt.Sprintf("session closed by local due to %s", sc.message) |
|
} |
|
} |
|
|
|
// newDatagram is an event when transport receives new datagram |
|
type newDatagram struct { |
|
sessionID uuid.UUID |
|
payload []byte |
|
}
|
|
|