×
26.03.2020
220.018.1052

Результат интеллектуальной деятельности: GoChat - серверная часть приложения чат

Вид РИД

Программа для ЭВМ

Код транзакции депонирования в блокчейн Ethereum: 0xafb6f80ce94418379757691ace617d2f9f5b73ba2af7350351a47f65c3457662
Наименование РИД на английском: GoChat - server part of chat application
Описание произведения: **Введение** Приложение - чат реализован с использованием протокола web socket. На данный момент сервер слушает только **ws** тип, а именно, не защищенное, в дальнейшем планируется добавить возможность использования **wss** Для успешного получения сокета, необходимо предоставить два параметра в момент установки соединения, а именно: 1. sid - query string параметр, сокращенно от sender id, а именно уникальный идентификатор участника чата. 2. sec-websocket-protocol - http заголовок, который передается как второй параметр, значение должно иметь специальный вид, см. ниже в примере. Пример `var ws = new WebSocket("ws://localhost:8888/ws?sid=2",["access_token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJpYXQiOm51bGwsImV4cCI6MTYxNDkyMzExNiwiYXVkIjoiIiwic3ViIjoiIiwiYWRtaW5faWQiOiIxIn0.G789lqmV0yUs9sKVTcpid6HK3D4zK98kum-EgWs3yiY"]) ` Параметр sid передается как обычный query string параметр, а значение заголовка должно иметь вид массива, где первый элемент идет access_token, второй это jwt токен, содержащий в себе expiration claim, а также один из двух: request_id или admin_id Использование http заголовка диктуется, отсутствием возможности предоставить Authorization заголовок, в виду архитектурной особенности протокола Web Socket и не возможности нести authorization header. Использование массива обусловленно тем, что для успешного handshake, сервер должен вернуть один из значений переданных в заголовке, таким образом access_token будет возвращаться. **Event** Взаимодействие между клиентской стороной и сервером реализованно основанным на абстракции, Event. Который имеет два свойства, а именно: 1. name - тип сообщения 2. args - дочерний json объект, который несет в себе аргументы конкретного типа event. `{ "name":"...", "args":"..." }` **Сообщения** * Event.AddConversation * Event.GetConversationList * Event.GetMessageList * Event.SendMessage * Event.ReceiveMessage * Event.ReadMessage * Event.GetUnreadInfo **Event.AddConversation** 1. user_id - уникальный идентификатор пользователя 2. application_id - уникальный идентификатор чат комнаты, к нему осуществляется привязка разговора. Пример: `{ "name":"Event.AddConversation", "args":"{\"user_id\":1,\"application_id\":100}" }` Response: Содержит в себе флаг показывающий успешен ли вызов сообщения, тип соощения и результат. Пример. `{ "name":"Event.AddConversation", "ok":true, "result":{ "id":2, "session_channel":"100", "application_id":100, "create_at":"2020-03-05T18:11:50.6982843Z", "update_at":"2020-03-05T18:11:50.6982843Z" } }` **Event.GetConversationList** 1. user_id - уникальный идентификатор пользователя Пример: `{"name":"Event.GetConversationList","args":"{\"user_id\":1}"}` Response: Содержит в себе флаг показывающий успешен ли вызов сообщения, тип сообщения а массив объектов conversation `{"name":"Event.GetConversationList","ok":true,"result":{"conversations":[{"id":1,"session_channel":"1","application_id":1,"create_at":"2020-03-04T16:11:20.751252-05:00","update_at":"2020-03-04T16:11:20.751252-05:00"},{"id":2,"session_channel":"100","application_id":100,"create_at":"2020-03-05T13:11:50.698284-05:00","update_at":"2020-03-05T13:11:50.698284-05:00"}]}}` **Event.GetMessageList** Ивент отвечает за возвращение списка сообщений для какого то конректного объекта conversation 1. session_channel - идентификатор объекта conversation полученный после вызова GetMessageList 2. executor_id - идентификатор пользователя от имени которого происходит вызов ивента Пример: `{ "name":"Event.GetMessageList", "args":"{\"session_channel\":\"100\",\"executor_id\":1}" }` Response: Содержит в себе флаг описывающий успешен ли вызов сообщения, тип сообщения, а также массив объектов message Пример: `{ "name":"Event.GetMessageList", "ok":true, "result":{ "Messages":[ { "id":1, "session_channel":"100", "content":"Hello World", "sender_id":1, "status":0, "create_at":"2020-03-05T13:20:15.948653-05:00", "update_at":"2020-03-05T13:20:15.948653-05:00" } ] } } **Event.SendMessage** Ивент отвечает за отсылку сообщения в контексте conversation 1. session_channel - идентификатор объекта conversation полученный после вызова SendMessage 2. sender_id - идентификатор пользователя который от имени которого происходит отсылка сообщения 3. content - контент сообщения 4. content_type - опциональный параметр, который указывает тип сообщения. Может быть 1 или 2. 1 соответствует тексту, 2 - изображение. В случае если никакого параметра не отсылается или отсылается параметр отличный от 1 и 2, контент тип текст будет использован Пример `{ "name":"Event.SendMessage", "args":"{\"session_channel\":\"10\",\"sender_id\":1,\"content\":\"Hey\"}" }` Response Содержит в себе флаг описывающий успешен ли вызов сообщения, тип сообщения, а также объект message Пример `{ "name":"Event.SendMessage", "ok":true, "result":{ "message":{ "id":10, "session_channel":"10", "content":"Hey", "sender_id":1, "status":0, "create_at":"2020-03-06T03:29:29.321142339Z", "update_at":"2020-03-06T03:29:29.321142998Z" } } }` **Event.ReceiveMessage** Ивент уведомляет о поступлении нового сообщения, в случае если оппонент присоединен к беседе в данный момент. Этот ивент отсылается с сервера. Пример `{ "name":"Event.ReceiveMessage", "ok":true, "result":{ "message":{ "id":11, "session_channel":"10", "content":"hey", "sender_id":1, "status":0, "create_at":"2020-03-06T03:41:13.944327781Z", "update_at":"2020-03-06T03:41:13.944328092Z" } } } **Event.ReadMessage**` Ивент осуществляет процедуру маркировки сообщения как прочитанно. 1. session_channel - идентификатор объекта conversation полученный после вызова ReceiveMessage 2. executor_id - идентификатор пользователя от имени которого происходит вызов ивента 3. messagE_id - идентификатор сообщения который необходимо отметить как прочитанный Пример `{ "name":"Event.ReadMessage", "args":"{\"session_channel\":\"10\",\"executor_id\":2,\"message_id\":11}" }` Response Содержит в себе флаг описывающий успешен ли вызов сообщения, тип сообщения. Пример `{ "name":"Event.ReadMessage", "ok":true, "result":null }`
Язык программирования, с использованием которого создана программа для ЭВМ (База данных)
Go
Вид и версия операционной системы, для функционирования под управлением которой предназначена программа для ЭВМ (База данных)
Любая - (Linux, Windows, Mac OS)
Объем программы для ЭВМ (Базы данных) в машиночитаемой форме в единицах, кратных числу байт
142606336
Ключевые слова: JSON, Go, PostgreSql, Events, JWT, ORM, go-chi, gorilla-websocket
Хеш-код депонирования: 2ba16b6628e86fc603c97efdb140d67703867e1203406dcfc13db6879c085abb
Источник поступления информации: Портал edrid.ru
+ добавить свой РИД