Skip to content
This repository was archived by the owner on Apr 27, 2019. It is now read-only.

Commit eeae11c

Browse files
committed
Merge branch 'development'
Conflicts: server.py
2 parents cbb52aa + d826215 commit eeae11c

File tree

3 files changed

+23
-25
lines changed

3 files changed

+23
-25
lines changed

plugins/announcer_plugin/announcer_plugin.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from base_plugin import BasePlugin
2+
from packets import connect_response
23

34

45
class Announcer(BasePlugin):
@@ -13,8 +14,10 @@ def activate(self):
1314

1415
def after_connect_response(self, data):
1516
try:
16-
self.factory.broadcast(
17-
self.protocol.player.colored_name(self.config.colors) + " joined.", 0, "", "Announcer")
17+
c = connect_response().parse(data.data)
18+
if c.success:
19+
self.factory.broadcast(
20+
self.protocol.player.colored_name(self.config.colors) + " joined.", 0, "", "Announcer")
1821
except AttributeError:
1922
self.logger.debug("Attribute error in after_connect_response.")
2023
return
@@ -23,7 +26,7 @@ def after_connect_response(self, data):
2326
raise
2427

2528
def on_client_disconnect(self, data):
26-
if not self.protocol.player.logged_in:
29+
if self.protocol.player is not None:
2730
self.factory.broadcast(self.protocol.player.colored_name(self.config.colors) + " left.", 0,
2831
"", "Announcer")
2932

plugins/core/player_manager/plugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def after_world_start(self, data):
100100
self.protocol.player.on_ship = True
101101

102102
def on_client_disconnect(self, player):
103-
if self.protocol.player.logged_in:
103+
if self.protocol.player is not None and self.protocol.player.logged_in:
104104
self.logger.info("Player disconnected: %s", self.protocol.player.name)
105105
self.protocol.player.logged_in = False
106106

server.py

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import datetime
88

99
import construct
10-
import twisted
1110
from twisted.internet import reactor
1211
from twisted.internet.error import CannotListenError
1312
from twisted.internet.protocol import ClientFactory, ServerFactory, Protocol, connectionDone, DatagramProtocol
@@ -110,7 +109,7 @@ def connectionMade(self):
110109
self.plugin_manager = self.factory.plugin_manager
111110
self.packet_stream = PacketStream(self)
112111
self.packet_stream.direction = packets.Direction.CLIENT
113-
logger.info("Connection established from IP: %s" % self.transport.getPeer().host)
112+
logger.info("Connection established from IP: %s", self.transport.getPeer().host)
114113
reactor.connectTCP(self.config.upstream_hostname, self.config.upstream_port,
115114
StarboundClientFactory(self), timeout=self.config.server_connect_timeout)
116115

@@ -431,32 +430,28 @@ def connectionLost(self, reason=connectionDone):
431430
:return: None
432431
"""
433432
try:
434-
x = build_packet(packets.Packets.CLIENT_DISCONNECT,
433+
if self.client_protocol is not None:
434+
x = build_packet(packets.Packets.CLIENT_DISCONNECT,
435435
packets.client_disconnect().build(Container(data=0)))
436-
437-
if hasattr(self, "protocol") and self.protocol is not None:
438-
if self.player is not None:
436+
if self.player is not None and self.player.logged_in:
439437
self.client_disconnect(x)
440-
self.player.logged_in = False
441438
self.player.protocol = None
442-
if self.client_protocol is not None:
439+
self.player = None
443440
self.client_protocol.transport.write(x)
444-
del self.client_protocol
445-
except twisted.internet.error.ConnectionDone:
446-
logger.debug("Connection was closed cleanly.")
447-
except Exception as e:
448-
logger.error("Couldn't disconnect protocol. %s", str(e))
441+
self.client_protocol.transport.abortConnection()
442+
except:
443+
logger.error("Couldn't disconnect protocol.")
449444
finally:
450-
self.die()
445+
try:
446+
self.factory.protocols.pop(self.id)
447+
except:
448+
self.logger.trace("Protocol was not in factory list. This should not happen.")
449+
finally:
450+
logger.info("Lost connection from IP: %s", self.transport.getPeer().host)
451+
self.transport.abortConnection()
451452

452453
def die(self):
453-
if self.player is not None and self.player.protocol is not None:
454-
self.transport.abortConnection()
455-
self.factory.protocols.pop(self.id)
456-
try:
457-
self.client_protocol.transport.abortConnection()
458-
except AttributeError:
459-
pass
454+
self.connectionLost()
460455

461456
def connectionFailed(self, *args, **kwargs):
462457
self.connectionLost()

0 commit comments

Comments
 (0)