IsReady function implemented
This commit is contained in:
		@ -5,6 +5,7 @@ import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"net"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.milar.in/milarin/channel"
 | 
			
		||||
)
 | 
			
		||||
@ -27,6 +28,34 @@ type Event[T any] struct {
 | 
			
		||||
	Reason string `json:"reason"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func IsReady(ctx context.Context, socket string) <-chan bool {
 | 
			
		||||
	out := make(chan bool, 1)
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer close(out)
 | 
			
		||||
 | 
			
		||||
		ticker := time.NewTicker(100 * time.Millisecond)
 | 
			
		||||
		defer ticker.Stop()
 | 
			
		||||
 | 
			
		||||
		for {
 | 
			
		||||
			select {
 | 
			
		||||
			case <-ticker.C:
 | 
			
		||||
				conn, err := net.Dial("unix", socket)
 | 
			
		||||
				if err == nil {
 | 
			
		||||
					defer conn.Close()
 | 
			
		||||
					out <- true
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
			case <-ctx.Done():
 | 
			
		||||
				out <- false
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	return out
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SendCommand[T any](socket string, cmd *Command) (*Response[T], error) {
 | 
			
		||||
	conn, err := net.Dial("unix", socket)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user