/// <summary> /// Allows you to make a call from your LongCode and play an audio file (mp3 or wav formats only) to a valid phone number /// </summary> /// <param name="accountId"></param> /// <param name="longCode">Long code (From phone number) in the following format Ex.1xxxxxxxxxx</param> /// <param name="model"></param> /// <returns></returns> public string AudioCall(int accountId, string longCode, AudioCall model) { var request = new RestRequest(AUDIO_CALL_URI, Method.POST) { RequestFormat = DataFormat.Json, JsonSerializer = new NewtonsoftSerializer() }; request.AddUrlSegment("accountId", accountId.ToString()); request.AddUrlSegment("longCode", longCode); request.AddBody(model); var res = Execute <object>(request) ?? ""; // TODO: Map a flattened contact to an unflattened one. return(res.ToString()); }
static void HandleUserCall(object sender, CallEventArgs e) { RadioCall call = e.Call; string rssiStr = ""; if (!double.IsNaN(call.RSSI)) { rssiStr = " RSSI " + call.RSSI; DBRadio r = db.ReadRadio(call.From); if (r == null) { r = new DBRadio(call.From.Int, call.RSSI); } else { r.AddReading(call.RSSI); } db.UpdateRadio(r); } if (call.IsAudio) { Console.WriteLine("Audio Call : {0} => {1} " + rssiStr, call.From, call.To); AudioCall ac = (AudioCall)call; string filename = String.Format(@"E:\RadioCalls\{0} - {1} to {2}.mp3", call.Start.ToString("yyyy-MM-ddTHH-mm-ss"), call.From.Int, call.To.Int); try { ac.SaveToMP3(filename); } catch (Exception) { Console.WriteLine("Unable to decode audio!"); } db.WriteVoiceCall(call.From, call.To, call.Start, call.End, call.RSSI, call.Slot, filename); srv.PublishVoiceCall(call); } else { DataCall dc = (DataCall)call; switch (dc.DataType) { case CallDataType.TMS: if (dc.TextMessage.Type == MessageType.Ack) { Console.WriteLine("Text Message Ack : {0} => {1}" + rssiStr, call.From, call.To); } else if (dc.TextMessage != null) { Console.WriteLine("Text Message : {0} => {1} \"{2}\"" + rssiStr, call.From, call.To, dc.TextMessage.Message); } else { Console.WriteLine("Text Message : {0} => {1} unable to parse!" + rssiStr, call.From, call.To); } break; case CallDataType.LRRP: LRRPPacket pkt = dc.LRRPPacket; if (pkt.Type == LRRPPacketType.ImmediateLocationResponse || pkt.Type == LRRPPacketType.TriggeredLocationData) { Console.WriteLine("Got LRRP Packet from {0} {1} {2}", call.From, pkt, rssiStr); } else { Console.WriteLine("Got LRRP Control Message: {0} => {1}" + rssiStr, call.From, call.To); } break; case CallDataType.ICMP: Console.WriteLine("Got ICMP Ping: {0} => {1}" + rssiStr, call.From, call.To); break; case CallDataType.RadioCheck: Console.WriteLine("Got Radio Check: {0} => {1}" + rssiStr, call.From, call.To); break; case CallDataType.RadioCheckAck: Console.WriteLine("Got Radio Check Ack: {0} => {1}" + rssiStr, call.From, call.To); break; case CallDataType.UnknownSmall: case CallDataType.IPAck: //Just ignore this break; default: Console.WriteLine("Data Call Type is {0}", dc.DataType); Console.WriteLine("Got Unknown radio call: {0} => {1}" + rssiStr, call.From, call.To); Console.WriteLine(" " + BitConverter.ToString(call.Data)); break; } } }