Esempio n. 1
0
func StartChannelSenderStage0(channel_name string, stage0_channel, stage1_channel chan *lib.PostMessage) chan bool {
	close_chan := make(chan bool)
	go func() {
		defer func() {
			if err := recover(); err != nil {
				utils.Log.Println(err)
				debug.PrintStack()
			}
		}()

		var post_message *lib.PostMessage
		var new_post_message *lib.PostMessage

		channel := GetChannel(channel_name)

		for {
			select {
			case <-close_chan:
				utils.Log.Printf("Channel [%s] SenderStage0 has quit...\n", channel_name)
				close_chan <- true
				return

			case post_message = <-stage0_channel:
				post_message.Lock = new(isync.SpinLock)
				stage1_channel <- post_message
				channel.LastPostUpdate = time.Now().Unix()

				if channel.MQTTMessageChan != nil {
					new_post_message = CopyMessage(channel, post_message)
					channel.MQTTMessageChan <- new_post_message
				}

				if ServerDebug {
					utils.Log.Println("ChannelSenderStage0: send post_message to stage1_channel", post_message)
				}
			}
		}
	}()

	return close_chan
}