Add initial project structure with backend and frontend setup
- Created backend structure with Go, including main application logic and API endpoints. - Added Docker support for both development and production environments. - Introduced frontend using Nuxt 3 with Tailwind CSS for styling. - Included configuration files for Docker and environment variables. - Established basic documentation for contributing, development, and deployment processes. - Set up .gitignore and .dockerignore files to manage ignored files in the repository.
This commit is contained in:
72
internal/app/topic.go
Normal file
72
internal/app/topic.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package app
|
||||
|
||||
import "sync"
|
||||
|
||||
type topic struct {
|
||||
c []chan *TileData
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (t *topic) watch(c chan *TileData) {
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
t.c = append(t.c, c)
|
||||
}
|
||||
|
||||
func (t *topic) send(b *TileData) {
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
for i := 0; i < len(t.c); i++ {
|
||||
select {
|
||||
case t.c[i] <- b:
|
||||
default:
|
||||
close(t.c[i])
|
||||
t.c[i] = t.c[len(t.c)-1]
|
||||
t.c = t.c[:len(t.c)-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (t *topic) close() {
|
||||
for _, c := range t.c {
|
||||
close(c)
|
||||
}
|
||||
t.c = t.c[:0]
|
||||
}
|
||||
|
||||
type Merge struct {
|
||||
From, To int
|
||||
Shift Coord
|
||||
}
|
||||
|
||||
type mergeTopic struct {
|
||||
c []chan *Merge
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (t *mergeTopic) watch(c chan *Merge) {
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
t.c = append(t.c, c)
|
||||
}
|
||||
|
||||
func (t *mergeTopic) send(b *Merge) {
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
for i := 0; i < len(t.c); i++ {
|
||||
select {
|
||||
case t.c[i] <- b:
|
||||
default:
|
||||
close(t.c[i])
|
||||
t.c[i] = t.c[len(t.c)-1]
|
||||
t.c = t.c[:len(t.c)-1]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (t *mergeTopic) close() {
|
||||
for _, c := range t.c {
|
||||
close(c)
|
||||
}
|
||||
t.c = t.c[:0]
|
||||
}
|
||||
Reference in New Issue
Block a user