Compare commits
17 Commits
80a45f4736
...
acd35ba734
Author | SHA1 | Date |
---|---|---|
Matthew Faltys | acd35ba734 | 2 years ago |
Matthew Faltys | b6f0768971 | 4 years ago |
Matthew Faltys | 7e2bf9949e | 5 years ago |
Matthew Faltys | ee891cd615 | 5 years ago |
Matthew Faltys | f79108ca31 | 5 years ago |
Matthew Faltys | 2439ca2771 | 5 years ago |
Matthew Faltys | 66b958d952 | 5 years ago |
Matthew Faltys | 55bc624128 | 5 years ago |
Matthew Faltys | 4fb58d628a | 5 years ago |
Matthew Faltys | cdafa1b2f3 | 5 years ago |
Matthew Faltys | 47f4886b48 | 5 years ago |
Matthew Faltys | 7a3357f7c5 | 5 years ago |
Matthew Faltys | f6cd22a3b9 | 5 years ago |
Matthew Faltys | 2dac08c098 | 5 years ago |
Matthew Faltys | d5f4aa988d | 5 years ago |
Matthew Faltys | a6a0e72a00 | 5 years ago |
Matthew Faltys | 39714170a1 | 5 years ago |
16 changed files with 351 additions and 19 deletions
@ -0,0 +1,30 @@ |
|||||||
|
#!/bin/bash |
||||||
|
HACKDIR=$1 |
||||||
|
USERDIR=$2 |
||||||
|
TTYRECCACHE=$3 |
||||||
|
SOTWDUMPCACHE=$4 |
||||||
|
|
||||||
|
### |
||||||
|
# clean old ttyrecs |
||||||
|
### |
||||||
|
cd /$HACKDIR/user/$USERDIR/ttyrec/ |
||||||
|
ls -1tr | head -n -$TTYRECCACHE | xargs -d '\n' rm -f -- |
||||||
|
|
||||||
|
|
||||||
|
### |
||||||
|
# clean sotw files |
||||||
|
### |
||||||
|
cd /$HACKDIR/user/$USERDIR/sotw/ |
||||||
|
|
||||||
|
# there are always 4 symlinked files |
||||||
|
# leave 5 of the latest dumps |
||||||
|
DUMPFILES=$(expr $SOTWDUMPCACHE + 4) |
||||||
|
|
||||||
|
FILES=$(ls -1tr *.txt | head -n -$DUMPFILES) |
||||||
|
|
||||||
|
for f in $FILES; do |
||||||
|
#test -h $f || echo "removing old file $f" |
||||||
|
if [ ! -h $f ]; then |
||||||
|
rm -rf $f |
||||||
|
fi |
||||||
|
done |
@ -0,0 +1,25 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
FILES=/sotw/* |
||||||
|
USERDIR=$1 |
||||||
|
HACKDIR=$2 |
||||||
|
|
||||||
|
# create initial dir if it does not exist |
||||||
|
mkdir -p $USERDIR/sotw/ |
||||||
|
|
||||||
|
# link all game files to user dir |
||||||
|
for f in $FILES |
||||||
|
do |
||||||
|
echo "linking $f" |
||||||
|
ln -s $f $USERDIR/sotw/ |
||||||
|
done |
||||||
|
|
||||||
|
# remove inital score file |
||||||
|
rm -rf $USERDIR/sotw/scores.dat |
||||||
|
# link in shared score file from hackdir |
||||||
|
ln -s $HACKDIR/scores.dat $USERDIR/sotw/ |
||||||
|
|
||||||
|
# remove initial config file |
||||||
|
rm -rf $USERDIR/sotw/swyrm.ini |
||||||
|
# copy in sotw config file |
||||||
|
cp $HACKDIR/swyrm.ini $USERDIR/sotw/ |
Binary file not shown.
@ -0,0 +1,19 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"os/exec" |
||||||
|
) |
||||||
|
|
||||||
|
func runCleanup(username string) { |
||||||
|
// clean up ttyrecs in /<hackdir>/user/<username>/ttyrec/
|
||||||
|
// clean up sotw dumps, aka:
|
||||||
|
// non-symlinked .txt files in /<hackdir>/user/<username>/sotw/
|
||||||
|
|
||||||
|
// run cleanup file
|
||||||
|
out, err := exec.Command("/bin/clean.sh", config.NethackLauncher.HackDir, username, config.NethackLauncher.TTYRecCache, config.NethackLauncher.SotwDumpCache).Output() |
||||||
|
if err != nil { |
||||||
|
fmt.Println(err) |
||||||
|
} |
||||||
|
fmt.Printf("%s\n", out) |
||||||
|
} |
@ -0,0 +1,144 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"bufio" |
||||||
|
"fmt" |
||||||
|
"io/ioutil" |
||||||
|
"os" |
||||||
|
"os/exec" |
||||||
|
"strconv" |
||||||
|
"strings" |
||||||
|
|
||||||
|
"gopkg.in/redis.v5" |
||||||
|
) |
||||||
|
|
||||||
|
func printLibraryScreen(redisClient *redis.Client, username string) { |
||||||
|
// print header
|
||||||
|
fmt.Printf(" %s\n", config.NethackLauncher.ServerDisplay) |
||||||
|
println("") |
||||||
|
|
||||||
|
println(" Choose a users library to view ('enter' without selection returns)") |
||||||
|
println("") |
||||||
|
|
||||||
|
us, err := ioutil.ReadDir(fmt.Sprintf("/%s/user", config.NethackLauncher.HackDir)) |
||||||
|
if err != nil { |
||||||
|
println(" No users exist ('enter' without selection returns)") |
||||||
|
panic(err) |
||||||
|
} |
||||||
|
|
||||||
|
users := make(map[int]string) |
||||||
|
usersTimer := 1 |
||||||
|
for _, u := range us { |
||||||
|
fmt.Printf(" %d) %s\n", usersTimer, u.Name()) |
||||||
|
|
||||||
|
// add user to line map
|
||||||
|
users[usersTimer] = fmt.Sprintf("%s", u.Name()) |
||||||
|
usersTimer++ |
||||||
|
} |
||||||
|
|
||||||
|
fmt.Println("") |
||||||
|
fmt.Printf(">> ") |
||||||
|
// start user input
|
||||||
|
|
||||||
|
// disable input buffering
|
||||||
|
exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run() |
||||||
|
// do not display entered characters on the screen
|
||||||
|
exec.Command("stty", "-F", "/dev/tty", "-echo").Run() |
||||||
|
|
||||||
|
var b []byte = make([]byte, 1) |
||||||
|
for { |
||||||
|
os.Stdin.Read(b) |
||||||
|
s, _ := strconv.Atoi(string(b)) |
||||||
|
|
||||||
|
// check if user is trying to navigate
|
||||||
|
if string(b) == "\n" { |
||||||
|
exec.Command("stty", "-F", "/dev/tty", "echo", "-cbreak").Run() |
||||||
|
clearScreen() |
||||||
|
if username == "" { |
||||||
|
clearScreen() |
||||||
|
printWelcomeScreen(redisClient) |
||||||
|
} else { |
||||||
|
clearScreen() |
||||||
|
printUserScreen(redisClient, username) |
||||||
|
} |
||||||
|
} |
||||||
|
// check if selection is in out map
|
||||||
|
if users[s] != "" { |
||||||
|
user := strings.Split(users[s], ":") |
||||||
|
fmt.Printf("going to spectate '%s'\n", user[0]) |
||||||
|
clearScreen() |
||||||
|
printUserLibraryScreen(redisClient, username, user[0]) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func printUserLibraryScreen(redisClient *redis.Client, username, currentUser string) { |
||||||
|
// print header
|
||||||
|
fmt.Printf(" %s\n", config.NethackLauncher.ServerDisplay) |
||||||
|
println("") |
||||||
|
|
||||||
|
println(" Choose a ttyrec to view ('enter' without selection returns)") |
||||||
|
println(" The following keybinds are available during playback:") |
||||||
|
println(" • + or f: double the speed of playback") |
||||||
|
println(" • - or s: halve the speed of playback") |
||||||
|
println(" • 0: set playback speed to 0, pausing playback") |
||||||
|
println(" • 1: set playback speed to 1 again") |
||||||
|
println("") |
||||||
|
|
||||||
|
t, err := ioutil.ReadDir(fmt.Sprintf("/%s/user/%s/ttyrec", config.NethackLauncher.HackDir, currentUser)) |
||||||
|
if err != nil { |
||||||
|
println(" No ttyrecs exist ('enter' without selection returns)") |
||||||
|
panic(err) |
||||||
|
} |
||||||
|
|
||||||
|
ttyrecs := make(map[int]string) |
||||||
|
ttyrecsTimer := 1 |
||||||
|
for _, ty := range t { |
||||||
|
fmt.Printf(" %d) %s\n", ttyrecsTimer, ty.Name()) |
||||||
|
|
||||||
|
// add user to line map
|
||||||
|
ttyrecs[ttyrecsTimer] = fmt.Sprintf("%s", ty.Name()) |
||||||
|
ttyrecsTimer++ |
||||||
|
} |
||||||
|
|
||||||
|
fmt.Println("") |
||||||
|
fmt.Printf(">> ") |
||||||
|
// start user input
|
||||||
|
|
||||||
|
// disable input buffering
|
||||||
|
exec.Command("stty", "-F", "/dev/tty", "cbreak", "min", "1").Run() |
||||||
|
// enable showing input on screen
|
||||||
|
exec.Command("stty", "-F", "/dev/tty", "echo", "-cbreak").Run() |
||||||
|
|
||||||
|
scanner := bufio.NewScanner(os.Stdin) |
||||||
|
for scanner.Scan() { |
||||||
|
if scanner.Text() == "" { |
||||||
|
clearScreen() |
||||||
|
printLibraryScreen(redisClient, username) |
||||||
|
} |
||||||
|
// save input
|
||||||
|
s := scanner.Text() |
||||||
|
sel, err := strconv.Atoi(s) |
||||||
|
if err != nil { |
||||||
|
fmt.Printf(" There was a problem with your last entry.\n>> ") |
||||||
|
} |
||||||
|
// check if selection is in our map
|
||||||
|
if ttyrecs[sel] != "" { |
||||||
|
fmt.Printf("going to watch '%s'\n", ttyrecs[sel]) |
||||||
|
clearScreen() |
||||||
|
|
||||||
|
// set ttyrec path
|
||||||
|
ttyrecPath := fmt.Sprintf("%s/user/%s/ttyrec/%s", config.NethackLauncher.HackDir, username, ttyrecs[sel]) |
||||||
|
tp := exec.Command("ttyplay", ttyrecPath) |
||||||
|
tp.Stdout = os.Stdout |
||||||
|
tp.Stdin = os.Stdin |
||||||
|
tp.Stderr = os.Stderr |
||||||
|
err := tp.Run() |
||||||
|
if err != nil { |
||||||
|
fmt.Print(err) |
||||||
|
} |
||||||
|
} |
||||||
|
clearScreen() |
||||||
|
printUserLibraryScreen(redisClient, username, currentUser) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue