Files
Web_CRICS_Server_VS2010_Prod/RCUHost/Implement/TFTPReceiver.cs
2025-12-11 09:17:16 +08:00

151 lines
5.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RCUHost.Protocols;
using System.IO;
using Common;
using Domain;
using Dao;
using RestSharp;
namespace RCUHost.Implement
{
public class TFTPReceiver : GenericReceiverBase, IT_FTPReceiver
{
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(TFTPReceiver));
public ITFTP_SetRepository TFTPLogRepository { get; set; }
public IHostRepository HostRepository { get; set; }
public override CommandType CommandType
{
get { return CommandType.TFTPLog; }
}
public override void Process(ReceiverContext context)
{
//logger.Error(string.Format("收到白天起始时间命令回复,编码:{0}IP{1}", context.SystemHeader.Value.HostNumber.ToString(), context.RemoteEndPoint.Address.ToString() + ":" + context.RemoteEndPoint.Port.ToString()));
var data = context.Data;
string msg = context.RemoteEndPoint.Address.ToString() + ":" + context.RemoteEndPoint.Port.ToString() + ":" + Tools.ByteToString(context.Data);
string hostnum = context.SystemHeader.Value.HostNumber.ToString();
logger.Error("收到主机信息数据:" + msg);
logger.Error("收到主机信息数据:" + hostnum);
Host host = HostRepository.GetByHostNumber(hostnum);//.RemoteEndPoint.Address.ToString());
if (host != null)
{
string dataHex = Tools.ByteToString(context.Data);
int offset = StructConverter.SizeOf(context.SystemHeader);
int length = context.Data.Length - offset - 2;
using (MemoryStream stream = new MemoryStream(context.Data, offset, length))
{
using (BinaryReader reader = new BinaryReader(stream))
{
byte isEnable = reader.ReadByte();//是否启用
int report_port = BitConverter.ToUInt16(reader.ReadBytes(2), 0);//局域网端口
int report_lasttime = BitConverter.ToUInt16(reader.ReadBytes(2), 0);//上传多久
int domain_len = reader.ReadByte();
byte[] domain_fact = reader.ReadBytes(domain_len);
string domainstring = Encoding.UTF8.GetString(domain_fact);
int hostid = host.ID;
int hotelid = host.SysHotel.ID;
bool isenable = false;
//日志开启状态
//FF全开 00全关
if (isEnable == 0xFF)
{
isenable = true;
}
string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
TFTP_Set t = new TFTP_Set();
t.HotelCode = host.SysHotel.Code;
t.HotelID = host.SysHotel.ID;
t.HostID = hostid;
t.RoomNumber = host.RoomNumber;
t.IsTrigger = isenable;
t.LastTime = report_lasttime;
t.TargetPort = report_port;
t.TargetDomain = domainstring;
t.CreateTime = ti;
TFTP_Set ttt = TFTPLogRepository.GetDataBy(hotelid, hostid);
if (ttt != null)
{
ttt.IsTrigger = isenable;
ttt.LastTime = report_lasttime;
ttt.TargetPort = report_port;
ttt.TargetDomain = domainstring;
ttt.CreateTime = ti;
TFTPLogRepository.Update(ttt);
}
else
{
TFTPLogRepository.Save(t);
}
string debug_log_report_url = RCUHost.TimingHelper.Common.debug_log_report_url;
string debug_log_report_mqtt_topic = "blw/tftp/report/"+hotelid;
string str = Newtonsoft.Json.JsonConvert.SerializeObject(t);
var client1 = new RestClient(debug_log_report_url);
var request1 = new RestRequest("/", Method.POST);
//注意方法是POST
//两个参数名字必须是 topic 和payload ,区分大小写的
request1.AddParameter("topic", debug_log_report_mqtt_topic);
request1.AddParameter("payload", str);
client1.ExecuteAsync(request1, (response) => { });
}
}
}
}
public byte[] CreateDataPacket()
{
SystemHeader systemHeader = CreateSystemHeader();
//加2是 最后是CRC
byte[] ip = new byte[] { 0x00 };
int size = StructConverter.SizeOf(systemHeader) + ip.Length + 2;
systemHeader.FrameLength = (ushort)size;
using (MemoryStream stream = new MemoryStream(size))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(StructConverter.StructToBytes(systemHeader));
writer.Write(ip);
writer.Write(new byte[] { 0, 0 });
return stream.ToArray();
}
}
}
public void Send_QueryData(byte[] originaldata, string hostnumber, string mac)
{
var data = CreateDataPacket();
string vvv = Tools.ByteToString(data);
logger.Error("cha xun:" + vvv + " hostnumber:" + hostnumber + " mac:" + mac);
Send(data, hostnumber, mac);
}
}
}