Skip to content

Commit

Permalink
add client and server
Browse files Browse the repository at this point in the history
  • Loading branch information
halcat0x15a committed Nov 7, 2011
0 parents commit b02c5cf
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
*.pyc
Empty file added __init__.py
Empty file.
15 changes: 15 additions & 0 deletions client.py
@@ -0,0 +1,15 @@
import socket
import pickle

class Client(object):

def __init__(self, address):
self.address = address

def send(self, data):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(self.address)
sent = self.socket.send(pickle.dumps(data))
response = self.socket.recv(1024)
self.socket.close()
return pickle.loads(response)
45 changes: 45 additions & 0 deletions server.py
@@ -0,0 +1,45 @@
import threading
import pickle
import SocketServer

LOGIN = 'Login'

BATTLE = 'Battle'

class Handler(SocketServer.BaseRequestHandler):

def _login(self, data, client_ip):
if client_ip == self.server.server_address[0] and data == BATTLE:
self.server.mode = BATTLE
return BATTLE
else:
if not self.server.players.has_key(client_ip):
self.server.players[client_ip] = []
return self.server.players.keys()

def _battle(self, data, client_ip):
self.server.players[client_ip] = data
return self.server.players

def handle(self):
data = pickle.loads(self.request.recv(1024))
client_ip = self.client_address[0]
if self.server.mode == LOGIN:
response = self._login(data, client_ip)
elif self.server.mode == BATTLE:
response = self._battle(data, client_ip)
self.request.send(pickle.dumps(response))

class Server(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
def __init__(self, host, port):
SocketServer.TCPServer.__init__(self, (host, port), Handler)
self.mode = LOGIN
self.players = {}
self.socores = {}

def create_server(host, port, daemon=True):
server = Server(host, port)
server_thread = threading.Thread(target=server.serve_forever)
server_thread.setDaemon(daemon)
server_thread.start()
return server
27 changes: 27 additions & 0 deletions test_server.py
@@ -0,0 +1,27 @@
import unittest
import server
import client

class ServerTests(unittest.TestCase):

def setUp(self):
self.server = server.create_server('localhost', 0)
self.host, self.port = self.server.server_address
self.client = client.Client((self.host, self.port))

def test_server(self):
self.assertEquals(self.client.send(None)[0], self.host)
self.assertEquals(self.client.send(server.BATTLE), server.BATTLE)
self.assertEquals(self.client.send('Test')[self.host], 'Test')

def tearDown(self):
self.server.shutdown()

def test_suite():
suite = unittest.TestSuite()
suite.addTests((unittest.makeSuite(ServerTests)))
return suite

if __name__ == '__main__':
unittest.main(defaultTest='test_suite')

0 comments on commit b02c5cf

Please sign in to comment.