源码

蘑菇街iOS客户端应用源码

限于喜欢 提交于 2020-01-30 17:48:43
蘑菇街iOS客户端应用源码 随着蘑菇街由导购向电商转型,蘑菇街自己的IM也应运而生,IM起初只是用于商家和买家之间沟通的工具。后面我们问自己,既然已经有了用于客服的IM,为什么不自己做一个IM,用于公司内部的沟通工具,来替换RTX呢,然后就有了TT(TeamTalk)的雏形,现在蘑菇街内部的IM工具都是TT来完成的。随着TT的逐渐完善,我们再次决定把TT开源,来回馈 开源社区 ,我们希望国内的中小企业都能用上免费开源的IM内部沟通工具。 ios客户端描述文档 TeamTalk是一套开源的企业办公即时通讯软件,作为整套系统的组成部分之一,IOS客户端为TeamTalk 客户端提供用户登录,消息转发及存储等服务。 目前IOS客户端支持的功能有 消息发送, 图片发送 拍照发送 多点登录功能 群聊功能 结构设计描述 客户端主要依赖三个module,DDMessageModule,DDGroupModule,ContactsModule。 DDMessageModule 主要负责消息的接收和存储功能,聊天界面的消息接收和最近联系人界面的消息接收都是从这个模块来的 DDGroupModule 负责对最近联系群进行管理 ContactsModule 负责对最近联系人进行管理 DDTcpClientManager类负责TCP收发的管理 <ignore_js_op> 详细说明: http://ios

Java源码学习 -- java.lang.String

ぐ巨炮叔叔 提交于 2020-01-30 17:19:00
java.lang.String是使用频率非常高的类。要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的。由java.lang.String,自然联想到java.lang.StringBuffer和java.lang.StringBuilder,下篇文章再来研究java.lang.StringBuffer和java.lang.StringBuilder。 重要属性 java.lang.String对象中字符串主要是以 字符数组 的形式存储。当调用对象方法获取字符串长度时,直接返回数组长度。判断字符串是否为空isEmpty()时,也直接检查数组长度是否为0。其部分发生代码如下所示: 1 /** The value is used for character storage. */ 2 private final char value[]; 3 4 /** Cache the hash code for the string */ 5 private int hash; // Default to 0 value:存储字符串的字符数组。该数组为final变量,一旦赋值,将不会更改。 hash:该String对象的哈希值。 构造方法 java.lang.String对象构造方法比较多,列举如下: 1 public String() 2 public

Linux Kernel 2.6.9源码分析 –- connect

℡╲_俬逩灬. 提交于 2020-01-30 16:20:34
Linux Kernel 2.6.9源码分析 –- connect (未完待续) 首先来看下connect的原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数说明: sockfd:客户端的socket描述符 addr:服务器的socket地址 addrlen:socket地址的长度 客户端通过调用connect函数来建立与TCP服务器的连接。 下面再来看下sys_connect(): asmlinkage long sys_connect ( int fd , struct sockaddr __user * uservaddr , int addrlen ) { struct socket * sock ; char address [ MAX_SOCK_ADDR ] ; int err ; sock = sockfd_lookup ( fd , & err ) ; if ( ! sock ) goto out ; err = move_addr_to_kernel ( uservaddr , addrlen , address ) ; if ( err < 0 ) goto out_put ; err = security_socket_connect ( sock , (

mavros的常用服务介绍

喜你入骨 提交于 2020-01-30 13:33:27
在mavros中,最常用的服务就两个,一个是解锁,还有一个就是模式切换。当然还有其他的服务,比如通过mavros修改航点信息,但是不常用,所以下面只介绍解锁和模式切换,这在前面的博客offboard源码解析里面已经介绍了。 这两种服务的用法参考之前的博客,这里不再赘述,这里补充一下模式切换服务里面可以切换哪些模式,除了offboard模式外还有那些模式。 这里需要用到mavros的源码:位置: /home/zouxu/mavros_ws/src/mavros/mavros/src/lib 当然,这个位置的前提是你在安装mavros时用到了源码安装方式,在电脑上存在mavros的工作空间mavros_ws,如果你没有这个,可以在github上下载源码也还是可以的。 我们打开目录下的:uas_stringify.cpp 它里面有针对apm固件的模式,我们只看px4的固件部分: //! PX4 custom mode -> string static const cmode_map px4_cmode_map { { { px4 :: define_mode ( px4 :: custom_mode :: MAIN_MODE_MANUAL ) , "MANUAL" } , { px4 :: define_mode ( px4 :: custom_mode :: MAIN_MODE

Linux Kernel 2.6.9源码分析 -- listen

只谈情不闲聊 提交于 2020-01-30 13:23:14
Linux Kernel 2.6.9源码分析 – listen 先来看下listen的原型:int listen(int sockfd, int backlog); 参数说明: sockfd :要监听的socket描述字 backlog :为相应socket可以排队的最大连接个数 返回值 :返回错误码 对于有链接的socket对子,如何来系统如何来区分谁是server,谁是client呢 ?只要在创建socket的时候有调用listen接口,此socket就成为了server socket.凡是server socket都不能主动去与别的socket建立连接,而只能被动地通过accept()来接受来自client socket的请求.而client socket刚好相反,不能调用accept()来接受连接请求,而只能主动地通过connect()提出连接请求. 下面来看下系统调用sys_listen如何实现这一功能 ? asmlinkage long sys_listen ( int fd , int backlog ) { struct socket * sock ; int err ; if ( ( sock = sockfd_lookup ( fd , & err ) ) != NULL ) { if ( ( unsigned ) backlog > sysctl

Python内置函数的源码中方法只有pass占位符说明 & Docs

跟風遠走 提交于 2020-01-30 12:48:14
pass python定义函数,必须有函数体,否则编译就会报错。函数体用一句pass占位是防止报错,并且不会有任何动作。内置函数中使用pass的情况如下: 父类中声明函数,但不声明实现,由继承的子类进行实现,也就是说这就是一个空方法; 这个函数的具体实现不用python编写,而是由例如C这种高效语法编写,在包中只用一个空方法占位,调用的时候是调用C语言实现的方法。python中有一些需要大量运算的内置函数是用C或者C++写的。 当你 help(str) 的时候,他们会显示出来。目的就是每个函数是做什么的,通过注释反射实现文档的一种方式。 cpython源码 https://github.com/python/cpython 使用DOC https://docs.python.org/3.7/library/stdtypes.html python教程 https://docs.python.org/3.7/tutorial/index.html https://docs.python.org/3.7/ 来源: CSDN 作者: 善良的小聪哥 链接: https://blog.csdn.net/u012798083/article/details/104113422

STL源码剖析之vector

送分小仙女□ 提交于 2020-01-30 12:03:52
容器vector的底层实现是由数组(连续的线性空间)实现的,veector是动态分配内存空间的,也就是说,随着元素的加入,它的内部机制会自行扩充空间以便于容纳新元素。因此vector的底层实现技术的核心是对大小的控制以及重新分配内存空间时对数据的移动效率。因为vector的底层实现是由数组来实现的,所以vector的迭代器就是原生指针。vector的简单实现如下: 我把迭代器的内嵌的相应的型别封装的起来。 template<typename T> struct IteratorType { typedef T Value_type; //迭代器所指之物的型别 typedef T* Pointer; typedef T* Iterator; //vector的迭代器 typedef T& Reference; typedef size_t Size_type; //vector容器的大小 typedef size_t Difference_type; //迭代器之间的距离 }; #include"IteratorType.h" #pragma once template<typename T> class Vector { public: Vector() :start(nullptr), finish(nullptr), end_finish(nullptr) {}; Vector

转:Mina2.0框架源码剖析(六)

怎甘沉沦 提交于 2020-01-30 12:00:56
上文的内容还有一些没有结尾,这篇补上。在ExpiringMap类中,使用了一个私有内部类ExpiringObject来表示待检查超时的对象,它包括三个域,键,值,上次访问时间,以及用于上次访问时间这个域的读写锁: private K key; private V value; private long lastAccessTime; private final ReadWriteLock lastAccessTimeLock = new ReentrantReadWriteLock(); 而ExpiringMap中包括了下述几个变量: private final ConcurrentHashMap<K, ExpiringObject> delegate;//超时代理集合,保存待检查对象 private final CopyOnWriteArrayList<ExpirationListener<V>> expirationListeners;//超时监听者 private final Expirer expirer;//超时检查线程 现在再来看看IoSession的一个抽象实现类AbstractIoSession。这是它的几个重要的成员变量: private IoSessionAttributeMap attributes;//会话属性映射图 private

转:Mina2.0框架源码剖析(五)

纵然是瞬间 提交于 2020-01-30 12:00:14
前面介绍过IoSessionRecycler是负责回收不再使用的会话的接口,ExpiringSessionRecycler是其一个实现类,用于回收超时失效的会话。 private ExpiringMap<Object, IoSession> sessionMap;//待处理的会话集 private ExpiringMap<Object, IoSession>.Expirer mapExpirer;//负责具体的回收工作 sessionMap的键是由本地地址和远端地址共同组成的,值是这两个地址对应的会话。 Expirer类实现了Runnable接口,这个线程负责监控ExpiringMap,并把ExpiringMap中超过阀值的元素从ExpiringMap中移除。这个线程调用了setDaemon(true),因此是作为守护线程在后台运行。具体的处理过程如下: private void processExpires() { long timeNow = System.currentTimeMillis();//当前时间 for (ExpiringObject o : delegate.values()) { if (timeToLiveMillis <= 0) { continue; } long timeIdle = timeNow - o.getLastAccessTime();/

Mongoose源码剖析:数据结构篇

一笑奈何 提交于 2020-01-30 11:59:16
引言 Mongoose中有几个数据结构扮演着重要的角色,它们分别是: struct mg_context:保存Mongoose的上下文,几乎每个函数都有mg_context参数 struct mg_connection:保存HTPP连接信息 struct mg_request_info:保存HTTP请求的信息,这个结构体传递给URL处理函数 我之所以现在这里介绍它,因为之后的分析工作中要用到它们,如果在读完本文后还不能很好的理解,请将问题带到后续文章中或代码分析中去,你会找到答案的。下面分别介绍它们。本文的主要内容如下: 1、mg_context详解 2、mg_connection详解 3、mg_request_info详解 4、其他数据结构 5、总结 1、mg_context详解 mg_context 结构体——表示Mongoose的上下文,也称为一个实例句柄。它的成员如下: struct mg_context { int stop_flag; /* Should we stop event loop */ SSL_CTX *ssl_ctx; /* SSL context */ FILE *access_log; /* Opened access log */ FILE *error_log; /* Opened error log */ struct socket