freeswitch.Session的实现过程

一.创建Session

在lua中通过调用 freeswitch.Session()可以创建一个Session对象。按源码里的注释,他包括四个原型:
LUA::Session::Session()
LUA::Session::Session(char ,CoreSession )
LUA::Session::Session(char *)
LUA::Session::Session(switch_core_session_t *)
所以他有四个初始化的方式。

mod_lua_wrap.cpp这个文件主要是将C++的函数接口封装成lua接口,在这里面:

static swig_lua_class _wrap_class_LUA_Session = { "Session", &SWIGTYPE_p_LUA__Session,_wrap_new_Session, swig_delete_Session, swig_LUA_Session_methods, swig_LUA_Session_attributes, { "Session", swig_LUA_Session_cls_methods, swig_LUA_Session_cls_attributes, swig_LUA_Session_cls_constants }, swig_LUA_Session_bases, swig_LUA_Session_base_names };

创建了一个swig_lua_class

typedef struct swig_lua_class {
  const char    *name;
  swig_type_info   **type;
  lua_CFunction  constructor;
  void    (*destructor)(void *);
  swig_lua_method   *methods;
  swig_lua_attribute     *attributes;
  struct swig_lua_class **bases;
  const char **base_names;
} swig_lua_class;

这个是表示一个注册lua对象的结构体。其实就是通过注册一个个swig_lua_class,使得lua脚本可以想调用对象一样调用C++里面的对象的方法。

name 是在lua中的名字
constructor 可以理解为构造函数
destructor 自然是析构函数
methods 这个对象的方法
attributes这个对象的属性

所以构造函数是:_wrap_new_Session()也是在执行freeswitch.Session的时候会调用_wrap_new_Session()这个函数。

static int _wrap_new_Session(lua_State* L) {
  int argc;
  int argv[3]={
    1,2,3
  };

  argc = lua_gettop(L);
  if (argc == 0) {
    return _wrap_new_Session__SWIG_0(L);
  }
  if (argc == 1) {
    int _v;
    {
      void *ptr;
      if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_switch_core_session_t, 0)) {
        _v = 0;
      } else {
        _v = 1;
      }
    }
    if (_v) {
      return _wrap_new_Session__SWIG_3(L);
    }
  }
  if (argc == 1) {
    int _v;
    {
      _v = SWIG_lua_isnilstring(L,argv[0]);
    }
    if (_v) {
      return _wrap_new_Session__SWIG_2(L);
    }
  }
  if (argc == 2) {
    int _v;
    {
      _v = SWIG_lua_isnilstring(L,argv[0]);
    }
    if (_v) {
      {
        void *ptr;
        if (SWIG_isptrtype(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
          _v = 0;
        } else {
          _v = 1;
        }
      }
      if (_v) {
        return _wrap_new_Session__SWIG_1(L);
      }
    }
  }

  SWIG_Lua_pusherrstring(L,"Wrong arguments for overloaded function 'new_Session'\n"
    "  Possible C/C++ prototypes are:\n"
    "    LUA::Session::Session()\n"
    "    LUA::Session::Session(char *,CoreSession *)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: freeswitch.tar.gz 是 FreeSWITCH 软件的压缩包,可以通过下载获取到该软件的安装文件。FreeSWITCH 是一个开源的软交换平台,支持语音、视频、文本等各种通信协议,可以让用户构建自己的电话系统、呼叫中心和实时通讯平台等。 要下载 freeswitch.tar.gz,用户可以访问 FreeSWITCH 官网(https://freeswitch.com/),在页面中的下载区域找到该软件的下载链接,并选择合适的版本进行下载。另外,还可以通过搜索引擎等方式找到其他可靠的下载源,并下载相应的软件包。 下载完成后,用户需要解压压缩包,然后按照 FreeSWITCH 的安装指南进行安装配置。通常需要设置一些参数,如软件的安装路径、IP 地址、端口号等,以及安装必要的依赖包和插件。在安装完成后,用户就可以使用 FreeSWITCH 提供的一系列功能和接口,构建自己的通信系统了。 ### 回答2: freeswitch.tar.gz是FreeSWITCH软件的安装包,可以在官网或者其他社区网站上进行下载。由于其体积较大,因此在下载过程中需要耐心等待,并且需要保证网络畅通,否则可能会出现下载失败或下载速度缓慢的情况。一些网站可能会限制下载速度或要求进行登录验证才能下载该文件。在下载完成之后,需要解压安装包并按照要求进行安装,一般包括设置软件环境、编译安装、配置参数等步骤。在安装完成后,还需要进行相应的测试和调试工作,以确保软件能够正常运行并满足用户需求。总体而言,freeswitch.tar.gz下载和安装需要一定的技术实力和耐心,但相信只要在正确的指导下进行,是可以成功完成的。 ### 回答3: freeswitch.tar.gz是一个FreeSWITCH软件的源代码压缩包。用户可以在官方网站上下载或通过github进行下载。在下载之前,用户需要确认自己系统的版本和平台以及FreeSWITCH版本的要求。下载完成后,用户可以解压缩该文件并按照官方文档进行安装和配置。在安装和配置完成后,用户就可以使用FreeSWITCH软件实现语音通信、视频通信、即时通讯等业务。 FreeSWITCH是开源、免费的,用户可以对其进行二次开发和定制以满足自己的需求。同时,FreeSWITCH还提供了包括SIP协议、音频编解码等一系列底层技术的支持,使其应用范围更加广泛。总体来说,freeswitch.tar.gz的下载可以帮助用户快速获取和使用FreeSWITCH软件,是许多开发人员和通信从业者的首选。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值