All pastes #87064 Raw Edit

robertj

public text v1 · immutable
·published 2006-07-13 16:14 UTC
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);