blob: cda06a0dc30b53a9bc2fe8b16d5ee331a507616b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
Class {
#name : 'TCServer',
#superclass : 'Object',
#instVars : [
'teapotServer',
'messagesQueue'
],
#category : 'TinyChat-server',
#package : 'TinyChat-server'
}
{ #category : 'initialization' }
TCServer class >> startOn: aPortNumber [
^self new
initializePort: aPortNumber;
registerRoutes;
registerErrorHandlers;
yourself
]
{ #category : 'initialization' }
TCServer class >> stopAll [
self allInstancesDo: #stop
]
{ #category : 'initialization' }
TCServer >> addMessage: aRequest [
messagesQueue add: (TCMessage from: (aRequest at: #sender) text: (aRequest at: #text)).
]
{ #category : 'initialization' }
TCServer >> initialize [
super initialize.
messagesQueue := TCMessageQueue new
]
{ #category : 'initialization' }
TCServer >> initializePort: anInteger [
teapotServer := Teapot configure: {
#defaultOutput -> #text.
#port -> anInteger.
#debugMode -> true
}.
teapotServer start
]
{ #category : 'initialization' }
TCServer >> messageCount [
^ messagesQueue size
]
{ #category : 'initialization' }
TCServer >> messagesFrom: request [
^ messagesQueue formattedMessagesFrom: (request at: #id)
]
{ #category : 'initialization' }
TCServer >> registerErrorHandlers [
teapotServer
exception: KeyNotFound -> (TeaResponse notFound body: 'No such message')
]
{ #category : 'initialization' }
TCServer >> registerRoutes [
teapotServer
GET: '/messages/count' -> (Send message: #messageCount to: self);
GET: '/messages/<id:IsInteger>' -> (Send message: #messagesFrom: to: self);
POST: '/messages/add' -> (Send message: #addMessage: to: self)
]
{ #category : 'initialization' }
TCServer >> stop [
teapotServer stop.
messagesQueue reset
]
|