今天呢,我们来学习下network.dll里面的CNetLogger类。

顾名思义,这个类主要是debug用的,也许有些人会问了,干嘛要自己封装个debug,直接用unity自带的debug不就好了吗。

其实系统自带的有很多个缺点:

1.不能统一的开关控制debug功能,假设当你想关闭的bebug,不想再打印的时候,发现unity没有这个接口,如果自己封装个开关,那么就方便管理,想开就开,想关就关,so easy!

2.unity的debug他只能打印到控制台,当我们发布游戏的时候,那么debug就毫无意义了,所以我们把debug的内容统一追加到一个文本,那么这样就好管理许多。

3.暂时想不到什么理由......

so,综上所述:我们要自己动手封装个debug类。

那么这个游戏dll的debug封装的还算可以,但是还是有许多不足的地方,相比较于其他游戏的debug,像暗黑。这里我不多说,怕被和谐。

废话不多说,下面我们来看看代码怎么实现?

前面我们讲到了自己的debug两个特点:1.统一开关 2.写入文件,这样我们就知道自己要定义什么变量。

    private FileStream fileStream = null;//文件流
private string filePath;//文本目录
private StreamWriter streamWriter = null;//写入的流对象
private int lastSaveTime = 0;//保存时间(毫秒)
private bool enable = false;//统一开关,默认为false

然后我们在构造函数中初始化,

public CNetLog(string dicPath, bool enable)//文件目录,不包括文件名和后缀
{
this.enable = enable;
if (enable)
{
try
{
string text = "network.txt";//文件名,包括后缀
if (0 == dicPath.Length)
{
this.filePath = text;//如果目录为空,那么就会在游戏的相对路径下,也就是跟Assets文件夹同级
}
else
{
if (dicPath[dicPath.Length - 1] == '\\' || dicPath[dicPath.Length-1] == '/')//这个是比如C://,或者C://Unity/
{
this.filePath = dicPath + text;
}
else
{
this.filePath = dicPath + "/" + text;//也就是dicPath后缀没有加斜杠的格式
}
}
this.fileStream = new FileStream(this.filePath, FileMode.Append, FileAccess.Write);//FileStream的构造方法,有好多种形式https://msdn.microsoft.com/zh-cn/library/tyhc0kft(v=vs.110).aspx去这个网站查api
this.streamWriter = new StreamWriter(this.fileStream, Encoding.Unicode);
this.lastSaveTime = Environment.TickCount;//自从系统开机到现在经过的毫秒数
}
catch (Exception e)
{
this.enable = false;
}
}
}

ok,写完构造函数,我们发现什么事情都干不了,所以接下来我们来写工作方法,也就是LogInfo(),LogError()等。。。

public void LogInfo(string info)
{
if (this.enable)
{
Monitor.Enter(this.streamWriter);//多线程安全,自己百度
int tickCount = Environment.TickCount;
this.streamWriter.WriteLine(string.Concat(System.DateTime.Now.ToString(), "[", tickCount.ToString(), "] [Info]:", info));//格式为9/3/2015 3:52:22 PM[14923508] [Info]:Hello,World
this.Save();//刷新
this.lastSaveTime = tickCount;
Monitor.Exit(this.streamWriter);
}
}

 

private void Save()
{
if (this.enable)
{
try
{
this.streamWriter.Flush();
this.fileStream.Flush();
}
catch (Exception e)
{
System.Diagnostics.Trace.WriteLine(e.Message);
}
}
}

ok,大致的东西已经写完,我们来测试一下,新建一个cs为Test.cs

public class Test : MonoBehaviour {

    CNetLog netLog;
void Start () {
netLog = new CNetLog("C://", true);
netLog.LogInfo("Hello,World");
} void Update () { }
}

  

运行,找到c盘下面的network.txt文件,打开可以看到成功了!

Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger的更多相关文章

  1. Unity3d-Socket之龙一编年史network.dll分析(1)

    今天闲着无聊,看到群里的老大共享了反编译的工具,就下载下来玩下. 说道反编译我个人不太推崇反编译,感觉不道德,毕竟是人家的代码,但是又回想一下,我们拿代码看是抱着学习的态度又有何不可,所谓既是民族的也 ...

  2. unity3D Socket连接C#server出现unity3D编辑器再次启动连接 unity3D编辑器马上卡死

    unity3D Socket与C#server第一次连接时通讯正常.客服端段关闭后.unity3D编辑器再次启动连接 unity3D编辑器马上卡死 原因是Socket处于异步状态,而异步线程是不受Un ...

  3. Python 3.5 socket OSError: [Errno 101] Network is unreachable

    /******************************************************************************** * Python 3.5 socke ...

  4. 以C语言为例完成简单的网络聊天程序以及关于socket在Linux下系统调用的分析

    套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程. 端 ...

  5. OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)

    前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...

  6. Socket开发框架之框架设计及分析

    虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设 ...

  7. Linux下tcp协议socket的recv函数返回时机分析(粘包)

    http://www.vckbase.com/index.php/wv/10http://blog.csdn.net/zlzlei/article/details/7689409 文章一: 当前在网络 ...

  8. Unity3D–Texture图片空间和内存占用分析(转载)

    原地址:http://www.unity蛮牛.com/home.php?mod=space&uid=1801&do=blog&id=756 Texture图片空间和内存占用分析 ...

  9. Unity3d socket通信 切换到web版本时报错SecurityException解决办法

    原文地址:传送门 今天苦战了一天,就跟一个Unity切换到web平台的socket通信出错苦苦纠缠了一天,问了好多大牛,但他们的回复都是我没搞过web平台下的通信或者我只专研于pc或者移动平台.看来没 ...

随机推荐

  1. Android端与Android端利用WIFI进行FTP通信

    一.客户端通信工具类: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  2. NativeScriptEngineService 被调用流程

    AbsractSearchScritp 有个lookup! NativeScriptEngineService search()会调用 script.setLookup() NativeScriptE ...

  3. Windows下上传项目到github

    首先,一定要有耐心.看到一大堆的命令行(其实并没有一大堆)不要觉得枯燥,最后当你成功把你的项目上传上去之后那种胜利的成果,还是挺有意思的.本人第一次写博客,勿喷. 我写的是主要的流程,详细内容还请移步 ...

  4. python写的的简单的爬虫小程序

    import re import urllib def getHtml(url): page=urllib.urlopen(url) html=page.read() return html def ...

  5. MySQL 的数据存储引擎

    MySQL的存储引擎 InnoDB: MySQL5.5之后的默认存储引擎. 采用MVCC来支持高并发,并且实现了四个标准的隔离级别(默认可重复读). 支持事务,支持外键.支持行锁.非锁定读(默认读取操 ...

  6. Java学习笔记(三)——静态导入,package-info,Fall-through

    [前面的话] 算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年 ...

  7. [水煮 ASP.NET Web API2 方法论](12-4)OData 支持的 Function 和 Action

    问题 在 Web API 中使用 OData Function 和 Action. 解决方案 可以通过 ODataModelBuilder,使用 OData 构建 ASP.NET Web API, E ...

  8. ios 安卓 video 取消播放自动全屏 属性

    x-webkit-airplay="true",x5-playsinline="true",webkit-playsinline="true" ...

  9. 智能社官网顶部导航实现demo

    从智能社的blue老师公开课中学习到了很多,在此表示感谢. 这个导航很好玩,于是就想实现一个. html <div id="box"> <ul> <l ...

  10. css文本、字母、数字过长 自动换行处理

    ---恢复内容开始--- white-space: normal|pre|nowrap|pre-wrap|pre-line|inherit;white-space 属性设置如何处理元素内的空白norm ...