- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
def _message_handler_thread(self):
self._nick_change_failed = []
while self.running:
msg = self._message_queue.get(True)
text = msg.get_data()
conn = msg.get_connection()
args = text.replace("\r", "").replace("\n", "").split(" ")
command = args[0].upper()
command_args = args[1:]
if command == "NICK":
if len(command_args) < 1:
self._send_not_enough_parameters(conn, command)
else:
ident = self._clients[conn].identifier if self._clients[conn].identifier else None
if not self._set_nick(conn, command_args[0], ident):
self._nick_change_failed.append(conn)
elif command == "USER":
if conn in self._clients:
if len(command_args) < 2:
self._send_not_enough_parameters(conn, command)
else:
''''
self._send_lusers(conn)
self._clients[conn].real_name = command_args[:]
self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
command_args[0] + "@" + self.name
'''
self._set_nick(conn, command_args[0], command_args[1])
self._send_motd(conn)
else: # Another way to identify is USER command.
if len(command_args) < 2:
self._send_not_enough_parameters(conn, command)
elif conn in self._nick_change_failed:
self._nick_change_failed.remove(conn)
else:
if self._set_nick(conn, command_args[0], command_args[1]):
self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
command_args[0] + "@" + self.name
self._send_motd(conn)
elif command == "PRIVMSG" or command == "NOTICE":
if len(command_args) < 2:
self._send_not_enough_parameters(conn, command)
else:
message_text = command_args[1] if not command_args[1][0] == ":" else \
text.replace("\r\n", "")[text.index(":")+1:]
src = self._clients[conn].get_identifier()
dest = command_args[0]
if not dest.startswith("#"):
for clnt in self._clients.values():
if clnt.nick == dest:
clnt.connection.send(
":%s %s %s :%s" % (src, command, dest, message_text)
)
break
else:
self._send_no_user(conn, dest)
else:
for chan in self._channels:
if chan.name == dest:
self._channel_broadcast(conn, chan, ":%s %s %s :%s" %
(src, command, dest, message_text))
break
else:
self._send_no_user(conn, dest)
elif command == "JOIN":
if len(command_args) < 1:
self._send_not_enough_parameters(conn, command)
elif not all(c in ALLOWED_CHANNEL for c in command_args[0]) and len(command_args[0]):
self._send_no_channel(conn, command_args[0])
else:
for chan in self._channels:
if chan.name == command_args[0]:
chan.users += 1
self._clients[conn].channels.append(chan)
self._send_to_related(conn, ":%s JOIN %s" % (self._clients[conn].get_identifier(),
chan.name), True)
self._send_topic(conn, chan)
self._send_names(conn, chan)
else:
chan = Channel(command_args[0], 1)
chan.users = 1 # We have a user, because we have created it!
self._channels.append(chan)
self._clients[conn].channels.append(chan)
self._clients[conn].send(":%s JOIN %s" % (self._clients[conn].get_identifier(),
command_args[0]))
elif command == "PART":
if len(command_args) < 1:
self._send_not_enough_parameters(conn, command)
else:
for chan in self._channels:
if chan.name == command_args[0]:
self._send_to_related(conn, ":%s PART %s" % (self._clients[conn].get_identifier(),
command_args[0]))
self._clients[conn].channels.remove(chan)
chan.users -= 1
break
...
Я писал сервер для IRC...
Больше говнокода: https://github.com/SopaXorzTaker/irc-server/
Stallman 15.03.2015 17:28 # 0
https://mail.python.org/pipermail/python-dev/2001-March/013328.html
GoUseGitHub 15.03.2015 18:15 # 0
tirinox 15.03.2015 18:29 # −2
Xom94ok 15.03.2015 21:02 # +2
А в сравнении с чем питон уродлив и по каким причинам?
Fike 15.03.2015 22:18 # −3
dxd 15.03.2015 22:56 # +1
Fike 15.03.2015 22:59 # +1
pushistayapodmyshka 16.03.2015 07:56 # +1
При взгляде на питоний код, глаза сначала собираются в кучу, а потом разбегаются (в ужасе, при виде андерскорсов, мелкобуквенности и визуального отсутствия блоков).
Fike 16.03.2015 10:22 # 0
Чо с PSR-то не так? Переводы строк после списка аргументов?
pushistayapodmyshka 16.03.2015 11:45 # 0
Fike 16.03.2015 12:11 # 0
насколько понимаю, это специально сделано так, чтобы старые библиотеки пока не ебались с переписыванием всего.
bormand 16.03.2015 10:41 # +5
Зато она хотя бы есть, в отличие от некоторых языков.
> надобности следить за пробелами
Ты так говоришь, как-будто на других языках не надо...
pushistayapodmyshka 16.03.2015 11:52 # 0
Надо. Но на перечисленных мной, ничего не отвалится из-за непоставленного пробела.
И вообще, для меня, отделять блоки кода пробелами – нечитабельный вариант. То ли дело няшные скобки.
roman-kashitsyn 16.03.2015 12:13 # +2
Ну вот из многолетней практики могу сказать, что ни разу ничего не отваливалось из-за пробела. Разве что в случаях, когда я набирал небольшую прогу целиком прямо в интерпретаторе, и то всего пару раз. В шарпе и жабе таких проблем, конечно, нет - в основном по причине отсутствия интерпретатора.
Питон - говно, но уж точно не из-за пробелов.
Fike 16.03.2015 12:24 # 0
3.14159265 17.03.2015 13:30 # +1
А какой язык(и) в вашем персональном топе на сей момент?
roman-kashitsyn 17.03.2015 15:44 # 0
Golang внезапно взлетел, хотя недостатков там более чем (женерики? нетривиальные структуры данных в стандартной либе?). Но он уж точно лучше пистона для всяческого системного программирования, ибо
1. Типизация, натив, мгновенная компиляция.
2. Опупенный инструментарий из коробки (gofmt, godoc, go get, профилировщик и т.п.).
3. Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
4. СОПРОГРАММЫ, ПАРАЛЛЕЛИЗМ, ПИРФОМАНС.
5. Весьма приличная стандартная библиотека.
3.14159265 17.03.2015 15:48 # +1
Женерики там выглядят как уёбищная кодогенерация, ну по сути их отсутствие.
А так мне тоже нравится.
>на выходе один переносимый бинарь.
> Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
Жутко пухлый по двум вышеописанным причинам. Такшта третий я бы внёс в спорные - никто статическую линковку не отменял.
В остальном го мне тоже доставляет, тем более надеюсь они его будут развивать. Ну и js, хоть какой он не уродский, хоть как его не любят, но другого у нас нету.
roman-kashitsyn 17.03.2015 16:16 # 0
pushistayapodmyshka 16.03.2015 12:39 # 0
Фикс.
Хотя, для условий и циклов с одной инструкцией – и пробел сойдёт. Но уж никак не для методов и многострочных тел циклов. Это только на мой слепошарый взгляд, конечно же.
kyzi007 16.03.2015 14:02 # +3
1024-- 16.03.2015 15:53 # 0
Помню, было обсуждение Array из JS (на ГК? там? не помню, где). Мужик хотел запилить автогенерацией массив и не смог пихнуть в конструктор не то 32К, не то 64К аргументов.
kyzi007 16.03.2015 14:10 # 0
gost 16.03.2015 13:43 # +4
А потом берутся всякие
1024-- 16.03.2015 15:55 # 0
gost 16.03.2015 16:57 # 0
pushistayapodmyshka 16.03.2015 18:49 # 0
bormand 16.03.2015 18:52 # +1
А тебе табов хочется?
pushistayapodmyshka 16.03.2015 19:00 # +1
Лучше на груви покодить, короче. Или на котлине каком-нибудь.
gost 16.03.2015 20:38 # 0
gost 16.03.2015 20:36 # +2
pushistayapodmyshka 17.03.2015 07:40 # 0
bormand 17.03.2015 10:36 # +1
1024-- 17.03.2015 14:08 # 0
pushistayapodmyshka 17.03.2015 19:11 # +1
roman-kashitsyn 16.03.2015 10:48 # +5
Какие мы нежные.
Мелкобуквенность много где ещё используется - GNU, stl, boost, linux вообще целиком используют этот стиль именований. Я подозреваю, что он родился из Lisp-стиля путём замены тире на подчёркивания (my-cool-thing -> my_cool_thing). Ибо гнушники знатные любители всяческих лиспов.
В гномьих либах вроде Glib, GTK, GIO, etc. используется тот же стиль именований, что и в пистоне.
Мне лично вообще индиффирентно, как называть: like_this, LikeThis, Like_this, likeThis, ... Главное - чтобы в проекте было как можно меньше вариаций.
wvxvw 16.03.2015 12:01 # 0
roman-kashitsyn 16.03.2015 17:03 # +3
Ну и кэйс-инсенситив не означает, что нельзя писать в верблюже-паскальем стиле :) В паскале же тоже кейс-инсенситив.
pushistayapodmyshka 16.03.2015 12:02 # 0
То, что питон и его стиль именования уродлив – это только моё ничтожное мнение, которое должно волновать кого-то настолько же, насколько меня задевают андерскоры и лоуверкэйс: бугуртить можно сколько угодно, но менять свои предпочтения или лезть со своими в язык – как-то неправильно что ли.
myaut 16.03.2015 12:44 # 0
Xom94ok 16.03.2015 13:46 # +5
Фан фэкт: блоком считается именно отступ пробелами, а { ограничители блока } появились в сишке для того, чтобы из неё можно было вычистить все пробельные символы и переносы на новую строку. Таким образом исходник становится короче и на перфоленту можно уместить больше кода.
Хотя мне тоже неудобно без фигурных скобочек.
bormand 15.03.2015 21:14 # +13
Сказал обжективсишник.
tirinox 16.03.2015 06:46 # 0
kegdan 16.03.2015 09:15 # +12
Vindicar 16.03.2015 13:57 # +5
pushistayapodmyshka 16.03.2015 14:42 # +2
wvxvw 16.03.2015 16:50 # +1
bormand 16.03.2015 17:01 # +2
Опыт лиспера не пропьешь!
wvxvw 16.03.2015 18:37 # +2
Lure Of Chaos 17.03.2015 20:11 # 0
kegdan 16.03.2015 16:33 # +1
bormand 16.03.2015 16:36 # 0
kegdan 16.03.2015 16:49 # 0
Stallman 16.03.2015 16:55 # +7
Vasiliy 16.03.2015 17:49 # +2
Xom94ok 16.03.2015 18:03 # +2
kegdan 16.03.2015 18:24 # +1
ясосон
Vindicar 16.03.2015 23:30 # 0