mirror of
				https://github.com/mochi-mqtt/server.git
				synced 2025-10-31 19:42:38 +08:00 
			
		
		
		
	 b26e03a433
			
		
	
	b26e03a433
	
	
	
		
			
			* Fix the bug where inline subscribers do not receive messages after all non-inline clients unsubscribe. * Bypassing asdine/storm and directly using bbolt. * Fixed erroneous removal of FileContributor. --------- Co-authored-by: JB <28275108+mochi-co@users.noreply.github.com>
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // SPDX-License-Identifier: MIT
 | |
| // SPDX-FileCopyrightText: 2022 mochi-mqtt, mochi-co
 | |
| // SPDX-FileContributor: mochi-co, werbenhu
 | |
| 
 | |
| package main
 | |
| 
 | |
| import (
 | |
| 	"log"
 | |
| 	"os"
 | |
| 	"os/signal"
 | |
| 	"syscall"
 | |
| 	"time"
 | |
| 
 | |
| 	mqtt "github.com/mochi-mqtt/server/v2"
 | |
| 	"github.com/mochi-mqtt/server/v2/hooks/auth"
 | |
| 	"github.com/mochi-mqtt/server/v2/hooks/storage/bolt"
 | |
| 	"github.com/mochi-mqtt/server/v2/listeners"
 | |
| 	"go.etcd.io/bbolt"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	boltPath := ".bolt"
 | |
| 	defer os.RemoveAll(boltPath) // remove the example db files at the end
 | |
| 
 | |
| 	sigs := make(chan os.Signal, 1)
 | |
| 	done := make(chan bool, 1)
 | |
| 	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
 | |
| 	go func() {
 | |
| 		<-sigs
 | |
| 		done <- true
 | |
| 	}()
 | |
| 
 | |
| 	server := mqtt.New(nil)
 | |
| 	_ = server.AddHook(new(auth.AllowHook), nil)
 | |
| 
 | |
| 	err := server.AddHook(new(bolt.Hook), &bolt.Options{
 | |
| 		Path: boltPath,
 | |
| 		Options: &bbolt.Options{
 | |
| 			Timeout: 500 * time.Millisecond,
 | |
| 		},
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	tcp := listeners.NewTCP(listeners.Config{
 | |
| 		ID:      "t1",
 | |
| 		Address: ":1883",
 | |
| 	})
 | |
| 	err = server.AddListener(tcp)
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	go func() {
 | |
| 		err := server.Serve()
 | |
| 		if err != nil {
 | |
| 			log.Fatal(err)
 | |
| 		}
 | |
| 	}()
 | |
| 
 | |
| 	<-done
 | |
| 	server.Log.Warn("caught signal, stopping...")
 | |
| 	_ = server.Close()
 | |
| 	server.Log.Info("main.go finished")
 | |
| }
 |