
Славик
28.12.2016
17:40:54
хотя ладно, ща попробую

Vlad
28.12.2016
18:46:59

Maxim
28.12.2016
18:47:56
Блин, пытаюсь подключиться к чату. Шлю websocket.WriteJSON() с маршленной структурой с данными, в ответ мгновенно получаю 7:::1+0 и соединение обрывается.

Google

Maxim
28.12.2016
20:35:20
Как показала проверка, даже если я ничего не шлю, то реакция аналогичная.

Denis
28.12.2016
20:36:19
А текст шлется?

Maxim
28.12.2016
20:36:35
Без понятия.

Denis
28.12.2016
20:37:02
WriteMessage

Maxim
28.12.2016
20:37:11
Выхлоп выполнения websocket.Write... только error
Так что я никак Response иным образом проверить не могу

Denis
28.12.2016
20:38:10
Ну а стектрейс?

Quet
28.12.2016
20:38:17
а что за чатик?

Maxim
28.12.2016
20:38:43
Ну а стектрейс?
7:::1+0
[READ] websocket: close 1006 (abnormal closure): unexpected EOF

Denis
28.12.2016
20:40:25
Соединение выдает ошибку ?
Слушаешь закрытие соединения ?

Maxim
28.12.2016
20:41:10
И это если я коннекчусь через ws. Если брать wss, то коннект вроде бы нормальный, НО в чате никаких изменений. Ни появление/уход моего бота, ни сообщений.

Google

Maxim
28.12.2016
20:41:57
2016/12/29 01:31:35 Connecting to wss://ec2-23-20-88-5.ch.hitbox.tv/socket.io/1/websocket/p2oZxYYrps-YsS-pM0FX
2016/12/29 01:31:35 {"name":"message","args":[{"method":"joinChannel","params":{"channel":"toby3d","name":"Left4Bot","token":"SuperSecret","hideBuffered":false}}]}
2016/12/29 01:31:35 1::
...

Denis
28.12.2016
20:42:34
Конкурентно пишешь в сокет ?

Maxim
28.12.2016
20:43:06

Denis
28.12.2016
20:43:27
Выкинь код на плейг
1006 ошибка чисто локальная

Maxim
28.12.2016
20:51:16
Ахтунг - страшный говнокод: https://play.golang.org/p/rxMK_N7cCg

Denis
28.12.2016
20:54:20
это запустится с локалки?

Maxim
28.12.2016
20:54:49

Denis
28.12.2016
20:56:19
в какой строке лажа?
56?

Maxim
28.12.2016
20:56:55
Я не знаю.
Выглядит так, будто всё работает. Только в самом чате не происходит ничего. И только при условии что я использую wss
Если я юзаю ws, то всё мгновенно ломается. Что странно, потому что в доках указан именно он, да и полгода назад я тестил примерно похожий код и всё работало, пусть и я отправлял string с подстановками

Denis
28.12.2016
20:59:32
токен менять можно?

Maxim
28.12.2016
20:59:52
Чутка костыльно, но можно

Denis
28.12.2016
21:02:28
скинь архивом в личку код, на гитхабе он не полный и токен

Maxim
28.12.2016
21:03:33
Спасибо @pifagorych за помощь. Всё оказалось довольно просто, но крайне неочевидно.

Google

Maxim
29.12.2016
00:41:11
Я или устал, или Args реально содержит СТРОКУ со структурой?
5:::{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"toby3d\",\"name\":\"toby3d\",\"nameColor\":\"7756CB\",\"text\":\"лол\",\"time\":1482971600,\"id\":\"3X9R\",\"role\":\"admin\",\"isFollower\":true,\"isSubscriber\":false,\"isOwner\":true,\"isStaff\":false,\"isCommunity\":false,\"media\":false,\"image\":\"/static/img/channel/toby3d_53e2ef88b0098_small.jpg\",\"buffer\":true,\"buffersent\":true}}"]}

Anton
29.12.2016
00:41:47
Нет
Так и есть
в args строка с json

Maxim
29.12.2016
00:42:01
Бляяяять

Anton
29.12.2016
00:42:11
да еще и с эскейпами

Maxim
29.12.2016
00:42:28
Понятно почему у меня не анмаршлится

Anton
29.12.2016
00:42:34
кееек

Maxim
29.12.2016
00:43:07
И что мне с этой хуйнёй делать?

Anton
29.12.2016
00:44:55
парсить)
а вообще изза чего такая хуйня вообще?

Maxim
29.12.2016
00:45:42
Это ответ сервера на события в чате на вебсокетах

corpix
29.12.2016
00:45:46
Я или устал, или Args реально содержит СТРОКУ со структурой?
5:::{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"toby3d\",\"name\":\"toby3d\",\"nameColor\":\"7756CB\",\"text\":\"лол\",\"time\":1482971600,\"id\":\"3X9R\",\"role\":\"admin\",\"isFollower\":true,\"isSubscriber\":false,\"isOwner\":true,\"isStaff\":false,\"isCommunity\":false,\"media\":false,\"image\":\"/static/img/channel/toby3d_53e2ef88b0098_small.jpg\",\"buffer\":true,\"buffersent\":true}}"]}
Как этот вывод получен?
Думаю что json в args у тебя без эскейпинга хранится, ведь эта структура - всего лишь обёртка, если я правильно понял

Maxim
29.12.2016
00:46:11
В логах
Без обработки

corpix
29.12.2016
00:47:26
А, ну значит data - результат unmarshal и именно он поэскейпил json

Maxim
29.12.2016
00:47:53

corpix
29.12.2016
00:48:27
Это очевидно - взять данные до unmarshal
Тьфу
s/unmarshal/marshal/

Google

Maxim
29.12.2016
00:49:58
Но есть ещё: _, data, err := c.NextReader()
Там data уже будет с типом io.Reader

corpix
29.12.2016
00:52:27
Т.е. data это []byte?
Странная библиотека. Ну в этом случае придётся сделать unmarshal сообщения. Вероятно в этой библиотеке есть какая-то структура для этого или даже функция, которая возвращает структуру с данными о сообщении вместо байт-слайса

Maxim
29.12.2016
00:53:20

corpix
29.12.2016
00:54:50

Maxim
29.12.2016
00:55:45
Возможно не прокатит, потому что есть префикс который всё портит:
5:::{"name":"message","args":["{\"method\":\"loginMsg\",\"params\":{\"channel\":\"toby3d\",\"name\":\"Left4Bot\",\"role\":\"user\"}}"]}

Admin
ERROR: S client not available

Maxim
29.12.2016
00:57:32

corpix
29.12.2016
00:58:49
Полагаю что структуру, соотвествующую пересылаемому JSON
Посмотри код, станет понятно

Maxim
29.12.2016
00:59:43

corpix
29.12.2016
01:00:54
Похоже на ошибку, не связанную с этой функцией

Maxim
29.12.2016
01:02:55
Похоже на ошибку, не связанную с этой функцией
Попробовал следующее:
var msg chat.Message
err := c.ReadJSON(&msg)
if err != nil {
log.Println("[READ]", err)
return
}
Но, очевидно, префикс 5::: всё портит:
[READ] json: cannot unmarshal number into Go value of type chat.Message

corpix
29.12.2016
01:08:01
А, вот оно что, я думал что этот префикс ставит горилла(что было бы странно).
В таком случае я бы вычитал этот не валидный префикс при получении сообщения(надеюсь он имеет фиксированный размер https://godoc.org/github.com/gorilla/websocket#Conn.NextReader), а весь хвост скормил бы json unmarshal
Но это тоже может не сработать, у меня нет полного понимания всей картины структур данных на различных уровнях передачи

Maxim
29.12.2016
01:08:59

corpix
29.12.2016
01:10:28
Когда и из чего? NextReader возвращает reader для сообщения, из него префикс можно и вычитать, а остальное в unmarshal

Maxim
29.12.2016
01:11:09

corpix
29.12.2016
01:11:42
Наличие этого префикса это ведь часть протокола сервиса, для которого ты делаешь модуль? Кажется что конкретно к протоколу websocket'ов он не имеет отношения

Maxim
29.12.2016
01:12:08
Да, именно

Google

corpix
29.12.2016
01:12:46
В таком случае то о чем я говорю может сработать

Maxim
29.12.2016
01:21:43
FFFFFFFFF в io.Reader нельзя как-нибудь получить строку или байты, чтобы вырезать ненужное говно?
А, лол, соседние пакеты.
Бляха-муха, даже io.Reader косячит аналогично
И ioutil.ReadAll()
Ох, пристрелите меня.

corpix
29.12.2016
02:06:55
Как косячит то? В каком месте FF? Мало инфы

Maxim
29.12.2016
02:08:46
При попытке перевести данные типом io.Reader через buffer или ioutill.Read результат всё равно с кавычками там, где их быть не должно:
5:::{"name":"message","args":["{\"method\":\"loginMsg\",\"params\":{\"channel\":\"toby3d\",\"name\":\"Left4Bot\",\"role\":\"user\"}}"]}
Потому что я без понятия как что-либо резать без трансформации io.Reader во что-нибудь.
Блин, если вот так на историю сообщений в последнее время смотреть, то либо я такой тупой, либо разрабы API наговнокодили.

blkmrkt
29.12.2016
04:21:46
А вот я на golang хочу сделать SELECT из одной sql базы и INSERT эти данные в другую. Я не знаю структуры таблицы заранее, но знаю что у source и dest структуры одинаковы.
Как это сделать?

Subbotin
29.12.2016
06:01:06
напиши на питоне. ну или парсинг show create table тебе в помощь

blkmrkt
29.12.2016
06:19:40
да уж, наверное лучше на питоне сделаю
вообще мне данные парсить не нужно, просто переложить с одной бд в другую

Sergey
29.12.2016
06:23:34
а какая бд? постгрес?

blkmrkt
29.12.2016
06:23:42

Sergey
29.12.2016
06:23:52
тогда можно с copy from / copy to

blkmrkt
29.12.2016
06:24:42

Subbotin
29.12.2016
07:01:10
Можно ещё воспользоваться встроенными возможностями постгреса. Емнип pgdump умел фильтры