MCPcopy Create free account
hub / github.com/daodst/chat / Create

Method Create

server/sessionstore.go:27–74  ·  view source on GitHub ↗
(conn interface{}, appid uint32)

Source from the content-addressed store, hash-verified

25}
26
27func (ss *SessionStore) Create(conn interface{}, appid uint32) *Session {
28 var s Session
29
30 switch conn.(type) {
31 case *websocket.Conn:
32 s.proto = WEBSOCK
33 s.ws, _ = conn.(*websocket.Conn)
34 case http.ResponseWriter:
35 s.proto = LPOLL
36 s.wrt, _ = conn.(http.ResponseWriter)
37 default:
38 s.proto = NONE
39 }
40
41 if s.proto != NONE {
42 s.subs = make(map[string]*Subscription)
43 s.send = make(chan []byte, 64) // buffered
44 s.stop = make(chan bool)
45 s.detach = make(chan string, 64) // buffered
46 }
47
48 s.appid = appid
49 s.lastTouched = time.Now()
50 s.sid = getRandomString()
51 s.uid = types.ZeroUid
52
53 if s.proto != WEBSOCK {
54 // Websocket connections are not managed by SessionStore
55 ss.rw.Lock()
56
57 elem := ss.lru.PushFront(&sessionStoreElement{s.sid, &s})
58 ss.sessions[s.sid] = elem
59
60 // Remove expired sessions
61 expire := s.lastTouched.Add(-ss.lifeTime)
62 for elem = ss.lru.Back(); elem != nil; elem = ss.lru.Back() {
63 if elem.Value.(*sessionStoreElement).val.lastTouched.Before(expire) {
64 ss.lru.Remove(elem)
65 delete(ss.sessions, elem.Value.(*sessionStoreElement).key)
66 } else {
67 break // don't need to traverse further
68 }
69 }
70 ss.rw.Unlock()
71 }
72
73 return &s
74}
75
76func (ss *SessionStore) Get(sid string) *Session {
77 ss.rw.Lock()

Callers 9

writeCertificateFunction · 0.45
serveLongPollFunction · 0.45
topicInitFunction · 0.45
accMethod · 0.45
serveWebSocketFunction · 0.45
requestSubMethod · 0.45
approveSubMethod · 0.45
writeFileFunction · 0.45
createFileWriterFunction · 0.45

Calls 3

LockMethod · 0.80
AddMethod · 0.80
UnlockMethod · 0.80

Tested by

no test coverage detected