mirror of
https://github.com/sot-tech/mochi.git
synced 2026-07-17 05:38:11 -07:00
initial middleware refactor
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
// Copyright 2016 The Chihaya Authors. All rights reserved.
|
||||
// Use of this source code is governed by the BSD 2-Clause license,
|
||||
// which can be found in the LICENSE file.
|
||||
|
||||
// Package server implements an abstraction over servers meant to be run .
|
||||
// alongside a tracker.
|
||||
//
|
||||
// Servers may be implementations of different transport protocols or have their
|
||||
// own custom behavior.
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/chihaya/chihaya/config"
|
||||
"github.com/chihaya/chihaya/tracker"
|
||||
)
|
||||
|
||||
var constructors = make(map[string]Constructor)
|
||||
|
||||
// Constructor is a function that creates a new Server.
|
||||
type Constructor func(*config.ServerConfig, *tracker.Tracker) (Server, error)
|
||||
|
||||
// Register makes a Constructor available by the provided name.
|
||||
//
|
||||
// If this function is called twice with the same name or if the Constructor is
|
||||
// nil, it panics.
|
||||
func Register(name string, con Constructor) {
|
||||
if con == nil {
|
||||
panic("server: could not register nil Constructor")
|
||||
}
|
||||
if _, dup := constructors[name]; dup {
|
||||
panic("server: could not register duplicate Constructor: " + name)
|
||||
}
|
||||
constructors[name] = con
|
||||
}
|
||||
|
||||
// New creates a Server specified by a configuration.
|
||||
func New(cfg *config.ServerConfig, tkr *tracker.Tracker) (Server, error) {
|
||||
con, ok := constructors[cfg.Name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf(
|
||||
"server: unknown Constructor %q (forgotten import?)",
|
||||
cfg.Name,
|
||||
)
|
||||
}
|
||||
return con(cfg, tkr)
|
||||
}
|
||||
|
||||
// Server represents one instance of a server accessing the tracker.
|
||||
type Server interface {
|
||||
Start()
|
||||
Stop()
|
||||
}
|
||||
Reference in New Issue
Block a user