forked from autumn-library/winow
-
Notifications
You must be signed in to change notification settings - Fork 1
/
СерверныеСобытия.os
110 lines (81 loc) · 5.71 KB
/
СерверныеСобытия.os
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
&Пластилин Перем БрокерСообщенийСобытийСервера;
&пластилин Перем ФабрикаОтветов;
Перем КоличествоЛайков;
Перем ИмяТопика;
Перем СейчасСмотрят;
Перем Комментарии;
&Контроллер("/sse")
&Отображение(Шаблон = "./hwapp/view/main_sse.html")
Процедура ПриСозданииОбъекта(&Пластилин ТопикиСерверныхСобытий)
ИмяТопика = "/sse/acorndiscussion";
КоличествоЛайков = 3;
СейчасСмотрят = 0;
ТопикиСерверныхСобытий.Добавить(ИмяТопика,
Новый Действие(ЭтотОбъект, "НовоеПодключениеССЕ"),
Новый Действие(ЭтотОбъект, "ОтключениеССЕ"));
Комментарии = Новый ТаблицаЗначений();
Комментарии.Колонки.Добавить("Имя");
Комментарии.Колонки.Добавить("Комментарий");
Комментарии.Колонки.Добавить("Дата");
КонецПроцедуры
Процедура НовоеПодключениеССЕ(Сессия, ИД) Экспорт
СейчасСмотрят = СейчасСмотрят + 1;
Сообщение = ФабрикаОтветов.СерверноеСобытие();
Сообщение.ТипСобытия("like")
.ДобавитьСтроку(Строка(КоличествоЛайков));
БрокерСообщенийСобытийСервера.ОтправитьСообщениеПоИдСоединения(ИД, Сообщение);
Сообщение = ФабрикаОтветов.СерверноеСобытие();
Сообщение.ТипСобытия("watch")
.ДобавитьСтроку(Строка(СейчасСмотрят));
БрокерСообщенийСобытийСервера.ОтправитьСообщениеВсем(ИмяТопика, Сообщение);
Для Каждого Комментарий из Комментарии Цикл
Сообщение = СообщениеИзСтрокиКомментария(Комментарий);
БрокерСообщенийСобытийСервера.ОтправитьСообщениеПоИдСоединения(ИД, Сообщение);
КонецЦикла;
КонецПроцедуры
Процедура ОтключениеССЕ(Сессия, ИД) Экспорт
СейчасСмотрят = СейчасСмотрят - 1;
Сообщение = ФабрикаОтветов.СерверноеСобытие();
Сообщение.ТипСобытия("watch")
.ДобавитьСтроку(Строка(СейчасСмотрят));
БрокерСообщенийСобытийСервера.ОтправитьСообщениеВсем(ИмяТопика, Сообщение);
КонецПроцедуры
&ТочкаМаршрута("")
Процедура ОсновнаяТочка() Экспорт
КонецПроцедуры
&ТочкаМаршрута("postcomment")
Процедура ЗапоститьКомментарий(ТелоЗапросОбъект) Экспорт
ДобавитьКомментарий(ТелоЗапросОбъект.name, ТелоЗапросОбъект.comment);
КонецПроцедуры
&ТочкаМаршрута("addLike")
Процедура ПоставитьЛайк() Экспорт
КоличествоЛайков = КоличествоЛайков + 1;
Попытка
Сообщение = ФабрикаОтветов.СерверноеСобытие();
Сообщение.ТипСобытия("like")
.ДобавитьСтроку(Строка(КоличествоЛайков));
БрокерСообщенийСобытийСервера.ОтправитьСообщениеВсем(ИмяТопика, Сообщение);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ОповеститьОКомментарии(СтрокаКомментария)
Сообщение = СообщениеИзСтрокиКомментария(СтрокаКомментария);
БрокерСообщенийСобытийСервера.ОтправитьСообщениеВсем(ИмяТопика, Сообщение);
КонецПроцедуры
Функция СообщениеИзСтрокиКомментария(СтрокаКомментария)
СтрокаШаблон = "<div class='comment'><div class='comment-header'><span class='comment-name'>%1</span> - <span class='comment-date'>%2</span></div>
|<div class='comment-body'>%3</div></div>";
Текст = СтрШаблон(СтрокаШаблон, СтрокаКомментария.Имя, СтрокаКомментария.Дата, СтрокаКомментария.Комментарий);
Сообщение = ФабрикаОтветов.СерверноеСобытие();
Сообщение.ТипСобытия("newComment")
.ДобавитьСтроку(Текст);
Возврат Сообщение;
КонецФункции
Процедура ДобавитьКомментарий(Имя, Комментарий)
НовыйКомментарий = Комментарии.Добавить();
НовыйКомментарий.Имя = Имя;
НовыйКомментарий.Комментарий = Комментарий;
НовыйКомментарий.Дата = ТекущаяДата();
ОповеститьОКомментарии(НовыйКомментарий);
КонецПроцедуры