Files
Desktop_TelephoneTools/PhoneBurstification.vb
2025-12-11 14:07:27 +08:00

370 lines
12 KiB
VB.net

Imports Telephone.PhoneBurstification
Public Class PhoneBurstification
Enum PhoneBuffType
'拨打电话
CallPhone = 1
'发送短信
SendSMS = 2
'打电话并播放预定内容 = 3
CallPhoneAndPlay = 3
End Enum
Enum comdType
'拨打电话
comdCallPhone = 1
'发送短信
comdSendSMS = 2
'打电话并播放预定内容 = 3
comdCallPhoneAndPlay = 3
'CDTAM 设置TTS模式 1远程0本地
comdCDTAM
'
comdCMGF
comdCMGS
comdmsg
comd1A
End Enum
''' <summary>
'''
''' </summary>
''' <param name="PhoneBuffType"> 操作类型 </param>
''' <param name="PhoneNum"> 电话号码 </param>
''' <param name="PhoneBuffContent"> 内容 </param>
Public Shared Function PhoneBurstification(ByVal PhoneBuffType As PhoneBuffType, callnode As CallInfoNode) As List(Of SendBuffnode)
If callnode Is Nothing Then Return Nothing
Dim PhoneBuffList As New List(Of SendBuffnode)
Select Case PhoneBuffType
Case PhoneBuffType.CallPhone
PhoneBuffList = CallPhone(callnode)
Case PhoneBuffType.SendSMS
PhoneBuffList = SendSMS(callnode)
Case PhoneBuffType.CallPhoneAndPlay
PhoneBuffList = CallPhoneAndPlay(callnode)
End Select
Return PhoneBuffList
End Function
''' <summary>
''' 拨打电话
''' </summary>
''' <param name="callnode"></param>
''' <returns></returns>
Public Shared Function CallPhone(callnode As CallInfoNode) As List(Of SendBuffnode)
Dim PhoneBuffList As New List(Of SendBuffnode)
Dim buff As String = $"{callnode.PhoneNumber};{vbCrLf}"
Dim SendBuffNode As New SendBuffnode(comdType.comdCallPhone, buff, 1000, 1, 100, 30000, True)
PhoneBuffList.Add(SendBuffNode)
Return PhoneBuffList
End Function
''' <summary>
''' 发送短信
''' </summary>
''' <param name="callnode"></param>
''' <returns></returns>
Public Shared Function SendSMS(callnode As CallInfoNode) As List(Of SendBuffnode)
Dim PhoneBuffList As New List(Of SendBuffnode)
'打电话
Dim content As String
Dim buff As String
Dim SendBuffNode As SendBuffnode
buff = $"AT+CMGF = 0{vbCrLf}"
SendBuffNode = New SendBuffnode(comdType.comdCMGF, buff, 1000, 1, 100, 2000, False)
PhoneBuffList.Add(SendBuffnode)
content = GetSendSMSContent(callnode)
Dim len As Integer = (content.Length \ 2) - 1
buff = $"AT+CMGS = {len.ToString()}{vbCrLf}"
SendBuffNode = New SendBuffnode(comdType.comdCMGS, buff, 1000, 1, 100, 2000, False)
PhoneBuffList.Add(SendBuffnode)
buff = $"{content}"
SendBuffNode = New SendBuffnode(comdType.comdmsg, buff, 1000, 1, 100, 2000, False)
PhoneBuffList.Add(SendBuffnode)
buff = $"{Chr(26)}{vbCrLf}"
SendBuffNode = New SendBuffnode(comdType.comd1A, buff, 1000, 1, 100, 2000, False)
PhoneBuffList.Add(SendBuffNode)
Return PhoneBuffList
End Function
Public Shared Function CallPhoneAndPlay(callnode As CallInfoNode) As List(Of SendBuffnode)
Dim PhoneBuffList As New List(Of SendBuffnode)
'打电话
Dim content As String
Dim buff As String = $"ATD{callnode.PhoneNumber};{vbCrLf}"
Dim SendBuffNode As New SendBuffnode(comdType.comdCallPhone, buff, 1000, 1, 100, 60000, True)
PhoneBuffList.Add(SendBuffNode)
'CDTAM 设置TTS模式 1远程0本地
buff = $"AT+CDTAM=1{vbCrLf}"
SendBuffNode = New SendBuffnode(comdType.comdCDTAM, buff, 1000, 1, 100, 1000, False)
PhoneBuffList.Add(SendBuffNode)
'播放内容
buff = $"AT+CTTS=2,{callnode.Content}{vbCrLf}"
SendBuffNode = New SendBuffnode(comdType.comdCallPhoneAndPlay, buff, 1000, 1, 100, 60000, False)
PhoneBuffList.Add(SendBuffNode)
'发送短信
'buff = $"AT+CMGF = 0{vbCrLf}"
'SendBuffNode = New SendBuffnode(comdType.comdCMGF, buff, 1000, 1, 100, 1000, False)
'PhoneBuffList.Add(SendBuffNode)
'content = GetSendSMSContent(callnode)
'Dim len As Integer = (content.Length \ 2) - 1
'buff = $"AT+CMGS = {len.ToString()}{vbCrLf}"
'SendBuffNode = New SendBuffnode(comdType.comdCMGS, buff, 1000, 1, 100, 1000, False)
'PhoneBuffList.Add(SendBuffNode)
'buff = $"{content}"
'SendBuffNode = New SendBuffnode(comdType.comdmsg, buff, 1000, 1, 100, 1000, False)
'PhoneBuffList.Add(SendBuffNode)
'buff = $"{Chr(26)}{vbCrLf}"
'SendBuffNode = New SendBuffnode(comdType.comd1A, buff, 1000, 1, 100, 1000, False)
'PhoneBuffList.Add(SendBuffNode)
Return PhoneBuffList
End Function
'获取短信发送内容
Public Shared Function GetSendSMSContent(callnode As CallInfoNode) As String
Dim result As String = ""
Dim munberstr As String = publicMode.SwapAndPad(callnode.PhoneNumber)
Dim content As String = publicMode.ConvertToUnicode(callnode.Content)
Dim len As Integer = content.Length \ 2
'将len转换成16进制字符串
Dim lenstr As String = len.ToString("X2")
result = $"0011000D9168{munberstr}0008C4{lenstr}{content}"
Return result
End Function
End Class
Public Class SendBuffnode
'命令类型
Public CommandType As Integer
'发送数据
Public SendData As String
'发送时间
Public SendTime As DateTime
'发送次数
Public SendCount As Integer
'发送状态
Public SendStatus As Boolean
'发送超时
Public SendTimeout As Integer
'当前发送次数
Public SendCurrentCount As Integer
'发送间隔
Public SendInterval As Integer
'是否需要回复
Public NeedReply As Boolean
'接收数据
Public ReceiveData As String
'接收结果
Public ReceiveResult As Boolean
'接收时间
Public ReceiveTime As DateTime
'接收次数
Public ReceiveCount As Integer
'接收状态
Public ReceiveStatus As Boolean
'接收超时
Public ReceiveTimeout As Integer
Enum SendStatustype
'待发送
WaitSend = 0
'已经发送等待回复
Sending
'重发数据
Resend
'发送超时
SendTimeout
'接收成功
ReceiveSuccess
'接收超时
ReceiveTimeout
End Enum
''' <summary>
'''
''' </summary>
''' <param name="Data"></param>
''' <param name="Timeout"></param>
''' <param name="SendCount"></param>
''' <param name="nSendInterval"></param>
Sub New(condtype As Integer, Data As String, Optional Timeout As Integer = 300, Optional nSendCount As Integer = 1, Optional nSendInterval As Integer = 100, Optional nReceiveTimeout As Integer = 300, Optional nNeedReply As Boolean = True)
CommandType = condtype
SendData = Data
'SendTime = Now
SendStatus = 0
SendCount = nSendCount
SendTimeout = Timeout
SendCurrentCount = 0
SendInterval = nSendInterval
ReceiveStatus = 0
ReceiveTimeout = nReceiveTimeout
End Sub
Public Function ReceiveStatusStateMachine(bode As SendBuffnode, voice As Byte()) As Boolean
'判断发送状态是否处于
If bode.SendStatus = 0 Then Return False
Dim readstr As String = publicMode.ByteToString(voice)
Select Case bode.CommandType
Case comdType.comdCallPhone
If readstr.Contains("VOICE CALL: END") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = False
Return True
End If
If readstr.Contains("VOICE CALL: BEGIN") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdCDTAM
If readstr.Contains("OK") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdCallPhoneAndPlay
If readstr.Contains("VOICE CALL: END") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = False
bode.SendStatus = 0
Return True
End If
If readstr.Contains("OK") OrElse readstr.Contains("ERROR") OrElse readstr.Contains("AT+CTTS") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdCMGF, comdType.comd1A
If readstr.Contains("OK") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdCMGS
If readstr.Contains("AT+CMGS =") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdmsg
If bode.SendData.Contains(readstr) Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
Case comdType.comdmsg
Case Else
If readstr.Contains("OK") Then
bode.ReceiveStatus = 1
bode.ReceiveData = readstr
bode.ReceiveResult = True
Return True
End If
End Select
Return False
End Function
'判断接收是否超时
Public Function IsNodeReceiveTimeout(bode As SendBuffnode) As Boolean
'判断接收是否超时
If bode.SendTime.AddMilliseconds(ReceiveTimeout) > Now Then
'判断接收是否成功
'If bode.ReceiveStatus = 1 Then
' Return False
'Else
Return True
'End If
Else
If bode.ReceiveStatus = True Then
Return True
End If
Return False
End If
End Function
Public Function IsNodeReceiveTimeout2(bode As SendBuffnode) As Boolean
'判断接收是否超时
If bode.SendTime.AddMilliseconds(ReceiveTimeout) > Now Then
'判断接收是否成功
'If bode.ReceiveStatus = 1 Then
' Return False
'Else
Return True
'End If
Else
Return False
End If
End Function
'设置发送状态
Public Shared Function SetSendStatus(bode As SendBuffnode, Status As SendStatustype) As SendBuffnode
Select Case Status
Case SendStatustype.WaitSend
bode.SendStatus = 0
Case SendStatustype.Sending
bode.SendStatus = 1
bode.SendTime = Now
bode.SendCurrentCount = bode.SendCurrentCount + 1
Case SendStatustype.Resend
bode.SendStatus = 2
bode.SendTime = Now
bode.SendCurrentCount = bode.SendCurrentCount + 1
bode.ReceiveResult = 0
bode.ReceiveData = ""
bode.ReceiveResult = False
Case SendStatustype.ReceiveSuccess
bode.SendStatus = 4
End Select
End Function
End Class