Skip to content

Instantly share code, notes, and snippets.

@MufidJamaluddin
Last active January 27, 2021 12:30
Show Gist options
  • Save MufidJamaluddin/67f9e0074cc6f696d76565af0d7ea2e2 to your computer and use it in GitHub Desktop.
Save MufidJamaluddin/67f9e0074cc6f696d76565af0d7ea2e2 to your computer and use it in GitHub Desktop.
var emailChannel chan *viewmodels.EmailMessage
var emailChannelClosed bool
func SendMessage(message *viewmodels.EmailMessage) {
emailChannel <- message
}
func Open() {
emailChannel = make(chan *viewmodels.EmailMessage)
// JUMLAH THREAD WORKER PENGIRIMAN EMAIL
worker := runtime.NumCPU()
if worker < 1 {
worker = 1
}
emailChannelClosed = false
// JALANKAN THREAD WORKER
for i := 0; i < worker; i++ {
go sendMessageInBackground()
}
}
// WORKER PENGIRIM EMAIL
func sendMessageInBackground() {
defer func() {
if !emailChannelClosed {
if err := recover(); err != nil {
log.Println("send email panic occurred:", err)
}
}
}()
// BUAT KONEKSI EMAIL
// LOGIKA INFINITE LOOP CONSUME DARI emailChannel
for {
select {
case vMessage, ok := <-emailChannel:
if !ok {
return
}
if vMessage == nil {
continue
}
// CEK KONEKSI EMAIL
// LOGIKA KIRIM EMAIL TARUH DISINI
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment