Skip to content
Snippets Groups Projects
Select Git revision
  • 13e2a23c2667335713a8682ba18e2bd75a310269
  • master default protected
  • backslash
  • nickname-match-configs
  • genofire/leds_rgb_get_state
  • genofire/rockets-state
  • genofire/ble-follow-py
  • plaetzchen/ios-workaround
  • blinkisync-as-preload
  • genofire/haule-ble-fs-deactive
  • schneider/max30001-pycardium
  • schneider/max30001-epicaridum
  • schneider/max30001
  • schneider/stream-locks
  • ios-workarounds
  • schneider/fundamental-test
  • schneider/ble-buffers
  • schneider/maxim-sdk-update
  • ch3/splashscreen
  • koalo/bhi160-works-but-dirty
  • koalo/wip/i2c-for-python
  • v1.9
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
34 results

qstrdefs.h

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    server.go 1.57 KiB
    package main
    
    import (
    	"context"
    	"log"
    	"sync"
    	"time"
    
    	"github.com/go-git/go-git/v5"
    )
    
    type server struct {
    	reqC chan *req
    
    	cacheMu sync.RWMutex
    	cache   map[string]map[string][]byte
    
    	gitMu     sync.Mutex
    	appRepo   *git.Repository
    	lastFetch time.Time
    }
    
    type req struct {
    	getReleases    chan []GLRelease
    	getAppRegistry chan []*appDescriptor
    }
    
    func (s *server) run(ctx context.Context) {
    	releases, err := getReleases(ctx)
    	if err != nil {
    		log.Fatalf("Initial release fetch failed: %v", err)
    	}
    	appRegistry, err := s.getAppRegistry(ctx)
    	if err != nil {
    		log.Fatalf("Initial app fetch failed: %v", err)
    	}
    
    	t := time.NewTicker(60 * time.Second)
    	for {
    		select {
    		case r := <-s.reqC:
    			if r.getReleases != nil {
    				r.getReleases <- releases
    			}
    			if r.getAppRegistry != nil {
    				r.getAppRegistry <- appRegistry
    			}
    		case <-t.C:
    			releases, err = getReleases(ctx)
    			if err != nil {
    				log.Printf("Failed to fetch releases: %v", err)
    			}
    			appRegistry, err = s.getAppRegistry(ctx)
    			if err != nil {
    				log.Printf("Failed to fetch app registry: %v", err)
    			}
    		}
    	}
    }
    
    func (s *server) getReleases(ctx context.Context) ([]GLRelease, error) {
    	sresC := make(chan []GLRelease)
    	select {
    	case s.reqC <- &req{getReleases: sresC}:
    		releases := <-sresC
    		return releases, nil
    	case <-ctx.Done():
    		return nil, ctx.Err()
    	}
    }
    
    func (s *server) getApps(ctx context.Context) ([]*appDescriptor, error) {
    	sresC := make(chan []*appDescriptor)
    	select {
    	case s.reqC <- &req{getAppRegistry: sresC}:
    		res := <-sresC
    		return res, nil
    	case <-ctx.Done():
    		return nil, ctx.Err()
    	}
    }