Ejemplo n.º 1
0
static SQRESULT sq_mysql_constructor(HSQUIRRELVM v)
{
    SQ_FUNC_VARS(v);
    SQ_GET_STRING(v, 2, host);
    SQ_GET_STRING(v, 3, username);
    SQ_GET_STRING(v, 4, password);
    SQ_GET_STRING(v, 5, sourcename);
    SQ_OPT_INTEGER(v, 6, port, 3306);
    SQ_OPT_STRING(v, 7, sockname, NULL);
    SQ_OPT_INTEGER(v, 8, optflags, 0);
    MYSQL *self=0;

    if(load_libmysqlclient(dynamicLibName))
    {
        self = dlmysql_init(NULL);
		if (!self) return sq_throwerror(v, _SC("error connecting: Out of memory."));
		if (!dlmysql_real_connect(self, host, username, password, sourcename, port, sockname, optflags))
		{
			SQRESULT res = sq_throwerror(v, _SC("error connecting to database. MySQL: %s"), dlmysql_error(self));
			dlmysql_close (self); /* Close conn if connect failed */
			return res;
		}
    }
    else return sq_throwerror(v, _SC("Failed to load libmysqlclient !"));

    sq_setinstanceup(v, 1, self);
    sq_setreleasehook(v,1, sq_mysql_releasehook);

    //save a weakref to allow statement return it's db
    sq_pushuserpointer(v, self);
    sq_weakref(v, 1);
    sq_setonregistrytable(v);

    return 1;
}
Ejemplo n.º 2
0
void
ThreadQueue::add(HSQUIRRELVM vm)
{
  // create a weakref to the VM
  HSQOBJECT vm_obj = vm_to_object(vm);
  sq_pushobject(global_vm, vm_obj);
  sq_weakref(global_vm, -1);

  HSQOBJECT object;
  if(SQ_FAILED(sq_getstackobj(global_vm, -1, &object))) {
    sq_pop(global_vm, 2);
    throw SquirrelError(global_vm, "Couldn't get thread weakref from vm");
  }
  sq_addref(global_vm, &object);
  threads.push_back(object);

  sq_pop(global_vm, 2);
}
Ejemplo n.º 3
0
void
TimeScheduler::schedule_thread(HSQUIRRELVM scheduled_vm, float time)
{
  // create a weakref to the VM
  SQObject vm_obj = vm_to_object(scheduled_vm);
  sq_pushobject(global_vm, vm_obj);
  sq_weakref(global_vm, -1);

  ScheduleEntry entry;
  if(SQ_FAILED(sq_getstackobj(global_vm, -1, & entry.thread_ref))) {
    sq_pop(global_vm, 2);
    throw SquirrelError(global_vm, "Couldn't get thread weakref from vm");
  }
  entry.wakeup_time = time;

  sq_addref(global_vm, & entry.thread_ref);
  sq_pop(global_vm, 2);

  schedule.push_back(entry);
  std::push_heap(schedule.begin(), schedule.end());
}
Ejemplo n.º 4
0
static SQInteger obj_delegate_weakref(HSQUIRRELVM v)
{
	sq_weakref(v,1);
	return 1;
}