rendered paste body#!/usr/bin/pythonMAXTRANS = 5000SV_INITS2C = 0SV_MAPCHANGE = 11SV_ITEMLIST = 21PROTOCOL_VERSION = 249DMF = 16import enetimport weakrefconnections = {}ents = {}peers = {}class player: hp = 100 peer = enet.ENetPeer()def getStr(d, i): s = unicode("") while(d[i] != 0): s = s + unichr(d[i]) i = i+1; return s;def handleInput(player, packet): i = 0; d = enet.IntVector(enet.parsepacket(packet)) end = len(d) - 1 while(i <= end): # SV_POS if d[i] == 2: d[i+2], d[i+3], d[i+4] if(d[i+12]&0x10 == 0): print "-- got short pos" i = i + 13 else: print "-- got long" i = i + 38 #raise SystemExit elif d[i] == 1: print "-- got info" i = i + 1 name = getStr(d, i) i = i + len(name) + 1 team = getStr(d, i) i = i + len(team) + 1 i = i + 6 elif d[i] == 3: text = getStr(d, i+1) i = i + len(text) + 2 print "TEXT FROM PLAYER" print text elif d[i] == 14: print "-- got ping" # client ping i = i + 1 else: print "Unknown packet type %d." % d[i] x = enet.msgsize(d[i]) * 2 if(x > 0 & d[i] != 0): print "Recovered, skipping %d bytes" % x i = i + x else: print "Non-fixed packet size, thus non-recoverable." print d[i] print d[i+1] print d[i+2] print "----" for a in d: print a raise SystemExitdef sendwelcome(peer): n = 1 #packet = enet.mint_packet(1, "iiiiisiii", SV_INITS2C, n, PROTOCOL_VERSION, 1, SV_MAPCHANGE, "TEStmAP", 1, SV_ITEMLIST,-1); packet = enet.mint_welcomePacket(n) enet.enet_peer_send(peer, 0, packet); if(packet.referenceCount==0): enet.enet_packet_destroy(packet); packet = enet.mint_mapChangePacket("login_room") enet.enet_peer_send(peer, 0, packet); if(packet.referenceCount==0): enet.enet_packet_destroy(packet); packet = enet.mint_itemList(); enet.enet_peer_send(peer, 0, packet); if(packet.referenceCount==0): enet.enet_packet_destroy(packet);if(enet.enet_initialize()<0): print("Unable to initialise network module");serverAddress = enet.ENetAddress()serverAddress.host = 0 #ENET_HOST_ANYserverAddress.port = 28785 #SAUERBRATEN_SERVER_PORTserver = enet.enet_host_create(serverAddress, 32, 0, 0)event = enet.ENetEvent()while(1): enet.enet_host_service(server, event, 1000) if event.type == 1: print "Connect" # instantiate i to first free integer entry in dictionary i = 0; for j in range(0, len(ents)+1): if(not ents.has_key(j)): i = j break # add to the list of ents new_player = player() new_player.peer = event.peer new_player.entnum = i ents[i] = new_player connections[event.peer.incomingPeerID] = new_player sendwelcome(event.peer) elif event.type == 2: print "Disconnect" del ents[connections[event.peer.incomingPeerID].entnum] del connections[event.peer.incomingPeerID] enet.enet_peer_disconnect(event.peer, 0); elif event.type == 3: handleInput(ents[connections[event.peer.incomingPeerID].entnum], event.packet) #packet = enet.mint_message("Hello There") #peer = ents[connections[event.peer.incomingPeerID].entnum].peer #enet.enet_peer_send(peer, 0, packet); elif event.type == 10: #ignore map change break;enet.enet_deinitialize()# serverhost = enet_host_create(&address, MAXCLIENTS, 0, uprate);# if(!serverhost) fatal("could not create server host\n");# for(int i = 0; i < MAXCLIENTS; i++) serverhost->peers[i].data = (void *)-1;# address.port = SAUERBRATEN_SERVINFO_PORT;# pongsock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM, &address);# if(pongsock == ENET_SOCKET_NULL) fatal("could not create server info socket\n");# atexit(cleanupserver);# atexit(enet_deinitialize);