| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package modules
-
- import "errors"
-
- type MsgQueue struct {
- queue chan MsgUnit
- QueueFunc QueueOperate
- }
-
- type QueueOperate interface {
- //queue 초기화
- queue_init() error
- //queue push
- push(msg Message) bool
- //pop message (wait -> busy waiting 여부 결정)
- pop(wait bool) (Message, error)
- }
-
- func (mq *MsgQueue) queue_init() error {
- if mq.queue != nil && len(mq.queue) != 0 {
- return errors.New("Queue Hadlerer Error: Already initialized.")
- } else if mq.queue == nil {
- mq.queue = make(chan MsgUnit, 1000)
- return nil
- } else {
- close(mq.queue)
- mq.queue = make(chan MsgUnit)
- return nil
- }
- }
-
- func (mq *MsgQueue) push(msg MsgUnit) bool {
- mq.queue <- msg
- return true
- }
-
- func (mq *MsgQueue) pop(wait bool) MsgUnit {
- if wait == true {
- if len(mq.queue) == 0 {
- return nil
- } else {
- return <-mq.queue
- }
- } else {
- //queue에 데이터가 들어올 때까지 block
- return <-mq.queue
- }
- }
|