Ho un'applicazione di telefonia, c'è un servizio Windows (prodotto di terze parti) in esecuzione su un server remoto. L'applicazione viene eseguita contro il server. Per connettere il server, abbiamo il codice.
public static TelephonyServer ts;
ts = new TelephonyServer(sIpaddress, "username", "password");
TelephonyServer è molto complicato.
Dopo aver ottenuto l'istanza di TelephonyServer, ora possiamo ottenere la risorsa da essa nell'applicazione. Di ':
m_ChannelResource = m_TelephonyServer.GetChannel();
m_VoiceResource = m_ChannelResource.VoiceResource; // VoiceResource
Ricorda che ogni chiamata telefonica avrà il proprio VoiceResource. Poi nel codice, ho usato una discussione per fare una chiamata. Se ci sono N chiamate, avrà N thread.
Ora in ogni thread, componiamo un numero in base al metodo Dial
, quindi suoniamo una stringa in base al codice PlayTTS
.
public DialResult Dial(string phonenumber)
{
int num = 1024;
num += phonenumber.Length * 2;
byte[] array = this.SerializePropertiesForInvocation();
num += array.Length;
VPacket vPacket = new VPacket(this.TelephonyLinkInfo.Guid, num, "ChannelResource.Dial.string.Invoke", 1);
vPacket.WriteNullableString(phonenumber);
vPacket.Serialize(array);
vPacket.DoneWriting();
byte[] buffer = base.TelephonyServer.ExecuteCommandHelperAsync(vPacket.Buffer, "ChannelResource::Dial()");
vPacket = VPacket.FromByteArray(buffer, "ChannelResource.Dial.string.Reply");
int version = vPacket.Version;
if (version == 1)
{
this.DeSerializePropertiesFromReply(VPacket.FromByteArray((byte[])vPacket.Deserialize()));
vPacket.DoneReading();
return this.m_DialResult;
}
vPacket.DoneReading();
throw new Exception("ChannelResource::Dial() Wrong Packet Version Received From Invocation.");
}
E.
public PlayTTS(string ttsString, string voice)
{
int num = 1024;
this.StopPlayAsync();
if (ttsString != null && ttsString.Length > 0)
{
num += ttsString.Length * 2;
}
if (voice != null && voice.Length > 0)
{
num += voice.Length * 2;
}
byte[] array = this.SerializePropertiesForInvocation();
num += array.Length;
VPacket vPacket = new VPacket(this.TelephonyLinkInfo.Guid, num, "VoiceResource.PlayTTS.string.string.Invoke", 1);
vPacket.WriteNullableString(ttsString);
vPacket.WriteNullableString(voice);
vPacket.Serialize(array);
vPacket.DoneWriting();
byte[] buffer = base.TelephonyServer.ExecuteCommandHelperAsync(vPacket.Buffer, "VoiceResource::PlayTTS()");
vPacket = VPacket.FromByteArray(buffer, "VoiceResource.PlayTTS.string.string.Reply");
int version = vPacket.Version;
if (version == 1)
{
this.DeSerializePropertiesFromReply(VPacket.FromByteArray((byte[])vPacket.Deserialize()));
vPacket.DoneReading();
}
vPacket.DoneReading();
throw new Exception("VoiceResource::PlayTTS() Wrong Packet Version Received From Invocation.");
}
Ora devo affrontare una domanda che usa C # Task
o async/await
scelta nella mia applicazione. Da questo articolo, ho sentito che usare Task
o async/await
è dipende dal fatto che l'applicazione sia legata all'I / O o alla CPU.
Non sono del tutto sicuro che l'applicazione sia legata all'I / O, al limite della CPU o ad un qualche tipo di ibrido. Puoi darmi qualche consiglio in base alle mie informazioni?
EDIT : rimuovi l'immagine di dettaglio di TelephonyServer in base al commento. 10/10/2014 12:54 pm