grim/amongchat
Clone
Summary
Browse
Changes
Graph
Initial revision
draft
default
tip
2020-09-23, Gary Kramlich
dead8a9014bd
Initial revision
package
server
import
(
"fmt"
"os"
"os/signal"
"syscall"
"keep.imfreedom.org/grim/amongchat/globals"
"keep.imfreedom.org/grim/amongchat/muxer"
)
type
Cmd
struct
{
Secret
string
`kong:"flag,name='secret',required='True',env='AC_SECRET',help='A secret token to control access to the server.'"`
ListenAddr
string
`kong:"flag,name='listen-addr',default=':22022',env='AC_LISTEN_ADDR',help='The address that the server should listen on.'"`
}
func
(
c
*
Cmd
)
Run
(
g
*
globals
.
Globals
)
error
{
sigChan
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
sigChan
,
syscall
.
SIGINT
,
syscall
.
SIGTERM
)
errChan
:=
make
(
chan
error
,
10
)
muxer
:=
muxer
.
New
(
c
.
Secret
)
defer
muxer
.
Close
()
go
func
()
{
if
err
:=
muxer
.
Run
();
err
!=
nil
{
errChan
<-
err
}
}()
server
:=
NewServer
(
c
.
ListenAddr
,
muxer
)
defer
server
.
Close
()
go
func
()
{
if
err
:=
server
.
Listen
();
err
!=
nil
{
errChan
<-
err
}
}()
for
{
select
{
case
err
:=
<-
errChan
:
return
err
case
s
:=
<-
sigChan
:
fmt
.
Printf
(
"Captured signal %v. Exiting...\n"
,
s
)
errChan
<-
nil
}
}
}