#region 私有变量
private string _date;
private string _Ext;
private string _location;
private string _port;
private string _id;
private string _model;
private string _fwver;
private List _support=new List();
private bool _power;
private int _bright;
private int _colorMode;
private int _ct;
private int _rgb;
private int _hue;
private int _sat;
private string _name;
private string place;//自定义变量 表示设备位置
#endregion
上方是私有变量。我们会在变量的上层再封装一层属性。
#region 属性
public string Date
{
get
{
return _date;
}
set
{
_date = value;
}
}
public string Ext
{
get
{
return _Ext;
}
set
{
_Ext = value;
}
}
public string Location
{
get
{
return _location;
}
set
{
_location = value;
}
}
public string Port
{
get
{
return _port;
}
set
{
_port = value;
}
}
public string id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string Model
{
get
{
return _model;
}
set
{
_model = value;
}
}
public string fw_ver
{
get
{
return _fwver;
}
set
{
_fwver = value;
}
}
public List support
{
get
{
return _support;
}
set
{
_support = value;
}
}
public bool power
{
get
{
return _power;
}
set
{
_power = value;
}
}
public int bright
{
get
{
return _bright;
}
set
{
_bright = value;
}
}
public int color_mode
{
get
{
return _colorMode;
}
set
{
_colorMode = value;
}
}
public int ct
{
get
{
return _ct;
}
set
{
_ct = value;
}
}
public int rgb
{
get
{
return _rgb;
}
set
{
_rgb = value;
}
}
public int hue
{
get
{
return _hue;
}
set
{
_hue = value;
}
}
public int sat
{
get
{
return _sat;
}
set
{
_sat = value;
}
}
public string name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public string Place { get { return place; } set { place = value; } }
#endregion
using DeviceModel;
using System.Collections.Generic;
namespace Devices
{
static public class DeviceList
{
public static List YeeLights=new List();
}
}
就是一个很正常的全局设备列表对象。
Yeelight类中,我们先写一个外壳然后慢慢讲:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace DeviceModel
{
public class Yeelight
{
public Yeelight() { }
}
}
。。。。。我都懒的删100层楼的贴
你现在已经有权限删除了,哈哈哈~看谁还这么水。。
不错,非常详细
好~顶~赞~~~~
分享的好专业~
哇,这次的帖子,真长啊~
客气客气。互相学习
厉害了
??????
1111111111111111111
这种就是讨嫌的人,不贡献分享还捣蛋
真是好可怕,自动灌水机
小伙子 你在我的心血帖里灌水灌成这样。。。不怕遭报应吗
那至此所有第二期的内容就码完啦。这里介绍了很多东西的。
有有利于调试的ConsoleManager。
有Socket基于UDP\TCP的两种发送方式。
有对于实物实体的封装思想。
有如何去维护实体的基本思想。
有体现集合与泛型、装箱与拆箱的暗操作在性能上的差异与取舍。
其实我的代码基础很差
我只是希望能传递一种封装的思想和系统框架结构设计的思想~
希望我的代码能被在座读者们理解
希望这一期对各位有所启发,晚安~
然后我们就可以着眼开始写Yeelight那些控制型方法啦。我这里直接放出代码,然后对头几条进行备注解释。后面都是一样的写法。
哇,好累好累,还是录视频讲着舒服。。。。
上放class内写了一个构造函数。我们在类内继续补充。
上方是私有变量。我们会在变量的上层再封装一层属性。
上面2个比较简单,就不说了。
接下去我们可以分析一下Yeelight协议。他所有的控制指令都是以{id,method,params}这样的格式去控制的。那么我们可以考虑用一个方法来封装这种控制字符串的输出和发送的请求。我把逻辑合一起封装成了SendMessage方法。
新增几个类库。用来维护接下去的列表和实体。
各位也可以不新增类库,纯粹都是我的坏习惯。。碰到点新玩意儿就想着 弄个新类库
List类:
就是一个很正常的全局设备列表对象。
Yeelight类中,我们先写一个外壳然后慢慢讲:
这是整个FindDevices的代码,有备注,各位看不懂请回复这层楼,我会解释
我的这个代码,并没有使用任何sql去维护设备的地址,纯粹的是在运行的那一刻搜索设备,并将对象都存在内存中。
所以我们要自定义一个搜索的方法。
在这个项目中,我将该方法封装在了一个我自己定义的弱鸡队列类库中了。(可能后续会讲到。、。也可能不讲这个弱鸡队列的设计)
我将这个类命名为FindDevices。如果以后接入了其他的基于网络协议的设备,我只需要在这添加即可。
在类中,我定义了一个静态类的静态方法,那就是搜索设备了。
可以看到,我定义了一个YeelightFinder的类,调用了FindYeeLights方法。那接下去我们会将首次调用UDP进行SearchRequest的逻辑,封装在这个方法内
好,言归正传。我们回到对Yeelight这类灯泡的对象构思上。
如果看过上一期的朋友应该还记得整个灯泡通信的过程。
首先我们需要对239.255.255.250:1982发送基于UDP协议的发现请求(Search Request),
之后他将会将局域网中所有的灯泡状态封包,以回应的方式回复回来(有一定几率会再接到一个状态更新包,只需覆盖掉原实体即可)
我们将要维护这一系列灯光对象。
要操作每个对象,我们都要与其单一对象进行基于TCP协议的控制请求。
所以,每个灯泡除了它自身的一些参数需要维护外,我们可能还需要维护一个socket。
那在我这个项目中,其实设备的上层还有一层地方层。这个地方层包含了我家的客厅、主卧室、次卧室三个地方。
有了地方层的限定,我可以限定多个对象内的符合要求的对象。(虽然我只有一个灯泡,但是想法有了)。
所以我们还有一个place的参数需要维护。
清楚了交互机制之后,我们接下去就开始对Yeelight的实体进行封装了!