Add media caching

master
HimbeerserverDE 2021-09-13 19:44:44 +02:00
parent 053bf61d9d
commit d58afab087
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
3 changed files with 54 additions and 0 deletions

View File

@ -203,6 +203,10 @@ func handleContent(cc *contentConn) {
RequestLoop:
for _, f := range cmd.Files {
if cc.fromCache(f.Name, f.Base64SHA1) {
break
}
filenames = append(filenames, f.Name)
for i, mf := range cc.media {
@ -230,6 +234,7 @@ func handleContent(cc *contentConn) {
}
if cmd.I == cmd.N-1 {
cc.updateCache()
cc.Close()
}
}

42
mediacache.go Normal file
View File

@ -0,0 +1,42 @@
package proxy
import (
"crypto/sha1"
"os"
"strings"
)
func (cc *contentConn) fromCache(filename, base64SHA1 string) bool {
os.Mkdir(Path("cache"), 0777)
data, err := os.ReadFile(Path("cache/", filename))
if err != nil {
return false
}
hash := sha1.Sum(data)
sum := b64.EncodeToString(hash[:])
if sum != base64SHA1 {
return false
}
cc.media = append(cc.media, mediaFile{
name: strings.Replace(filename, cc.name+"_", "", 1),
base64SHA1: sum,
data: data,
})
return true
}
func (cc *contentConn) updateCache() {
os.Mkdir(Path("cache"), 0777)
for _, f := range cc.media {
os.WriteFile(cc.name+"_"+f.name, f.data, 0666)
}
}
func cacheMedia(f mediaFile) {
os.WriteFile(f.name, f.data, 0666)
}

View File

@ -708,6 +708,13 @@ func (sc *ServerConn) process(pkt mt.Pkt) {
}
prepend(sc.name, &cmd.Filename)
if cmd.ShouldCache {
cacheMedia(mediaFile{
name: cmd.Filename,
base64SHA1: b64.EncodeToString(cmd.SHA1[:]),
data: cmd.Data,
})
}
case *mt.ToCltSkyParams:
for i := range cmd.Textures {
prependTexture(sc.name, &cmd.Textures[i])