All pastes #992608 Raw Edit

Untitled

public text v1 · immutable
#992608 ·published 2008-04-21 23:09 UTC
rendered paste body
import threading
import socket
import Queue
import time

myHost = ''
myPort = 6544
furcHost = "lightbringer.furcadia.com"
furcPort = 6500

client_path = 'C:\\progra~1\\furcadia\\'
client_name = 'furcadia.exe'
ini_path    = r'C:\docume~1\me\mydocu~1\furcadia\furcad~1\stimpy.ini'
bot_dir     = 'C:\\Documents and Settings\\me\\My Documents\\programming\\python\\furcadia\\rose_seller\\'
bot_name = "Stimpy"

class ConnectionToClient(threading.Thread):
   def __init__(self, clnt, sevr, message_queue, timer_queue):
      self.sevr = sevr
      self.clnt = clnt
      self.message_queue = message_queue
      self.timer_queue   = timer_queue
      threading.Thread.__init__(self)
      
   def run(self):
      while 1:
         try:
            data = from_client(self.clnt)
         except socket.error:
            print "Need to reconnect."
            break
            
         if data:
            self.message_queue.put(('from client', data))
         else:
            print "Client closed."
            self.message_queue.put(('from client', 'quit'))
            self.message_queue.put(('exit',0))
            break

class ConnectionToServer(threading.Thread):
   def __init__(self, clnt, sevr, message_queue, timer_queue):
      self.sevr = sevr
      self.clnt = clnt
      self.message_queue = message_queue
      self.timer_queue   = timer_queue
      threading.Thread.__init__(self)
   def run(self):
      data = ''
      while 1: 
         (new_data, reconnect) = from_server(self.sevr)
         if new_data:
            if new_data[-1] == '\x0a':
               data += new_data
               self.message_queue.put(('from server', data))
               if data == "(Communications error.\x0a":
                  self.message_queue.put(('reconnect', 0))
                  print "A communications error was encountered."
                  self.clnt.close()
                  break
               data = ''               
            else:
               data += new_data
         else:
            if reconnect:
               self.message_queue.put(('reconnect', 0))
            print "Connection to furcadia server lost."
            self.clnt.close()
            break

def proxy_ini(myPort):
   # fisrt we write the proxy.ini file
   try:
      f = open(r'c:\program files\furcadia\proxy.ini','r')
      saved = f.read()
      f.close()
   except:
      saved = "127.0.0.1 " + str(myPort) + '\n'
   f = open(r'c:\program files\furcadia\proxy.ini','w')
   f.write("127.0.0.1 " + str(myPort) + '\n')
   f.close()
   return saved
   ##############################

class Timers(threading.Thread):
   def __init__(self, timer_queue, message_queue):
      self.timer_queue = timer_queue
      self.message_queue = message_queue
      threading.Thread.__init__(self)
   def run(self):
      times = []
      while 1:
         if len(times) != 0:
            time_remaining = times[len(times)-1][0]-time.time()
            if time_remaining < 0:
               time_remaining = 0
         else: time_remaining = None

         try:
            (new_time,id) = self.timer_queue.get(timeout = time_remaining) # waits until either time til next one runs out, or 
         except Queue.Empty:                                               # a new timer trigger comes along.
            self.message_queue.put(('timer', times[len(times)-1][1]))
            times.pop()
         else:
            if new_time != -1:
               times.append((new_time+time.time(), id))
            else:
               break
            # sort it so the last time is the earliest, then we can pop it later.
            for i in range(len(times)-1):
               for j in range(len(times)-i-1):
                  if times[j][0] < times[j+1][0]:
                     temp = times[j+1]
                     times[j+1] = times[j]
                     times[j] = temp

def to_client(data, clnt):
   try:
      clnt.send(data)
   except socket.error:
      print "Interruption from ISP"

def from_client(clnt):
   data = clnt.recv(32768)
   return data

def to_server(data, sevr):
   sevr.send(data + '\x0a')

def from_server(sevr):
   try:
      data = sevr.recv(1024)
   except socket.error:
      print "Connection to furcadia lost when receiving!"
      return ('',1) # 1 signifies reconnect
   else:
      return (data,0)

def getTimerId(variables):
   i = 1
   while i in variables.timer_ids:
      i+= 1
   return i
   
   
   
class ConnectTimeOut(threading.Thread):
   def __init__(self, timeout_queue, sevr):
      self.timeout_queue = timeout_queue
      self.sevr = sevr
      threading.Thread.__init__(self)
   def run(self):
      try:
         command = self.timeout_queue.get(timeout = 30)
      except Queue.Empty: #if we received no message, we timed out.
         print "Connection timed out!"
         self.sevr.close()
      else:
         return 0 # otherwise we just let the function return.
         
         
class attrs():
   whisper       = False
   emote         = False
   speech        = False
   enter_dream   = False
   furre_move    = False
   furre_appear  = False
   furre_enters  = False
   furre_vanish  = False
   bot_ds_trig   = False
   furre_ds_trig = False
   any_ds_trig   = False
   eight_trigger = False
   join_req      = False
   summon_req    = False
   emit          = False
   
   
   name        = ""
   short_name  = ""
   message     = ""
   pcxfile     = ""
   pos_from    = (0,0)
   pos_to      = (0,0)
   pos_at      = (0,0)
   pose        = 0
   uid         = 0
   random_seed = 0
   ds_lines    = []
   given_value = 0
   direction   = ""
   entrycode   = 0
   paw_object  = 0
   furres_in_dream = 0

class Variables():
   def __init__(self, pid, connections):
      self.pid = pid
      self.connections = connections