using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using spsdksvr;
using spsdksw;
using SpRecord;
using System.Threading;
using System.IO;
using System.Windows.Forms;
using namespase_mysql_connection;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Net;
using System.Web;
using Newtonsoft.Json;
using System.Security.Cryptography;
using System.Web.Script.Serialization;
namespace sprec
{
public class myThread
{
public static Thread thread;
public myThread(string name,int start_stop,int count_thread) //Конструктор получает имя функции
{
if (start_stop == 1)
{
thread = new Thread(Program.ChannelListen);
thread.Name = name;
Console.WriteLine("thread.Name =" + thread.Name + ", " + thread.ManagedThreadId);
thread.IsBackground = true;
thread.Start();//передача параметра в поток
}
else if (start_stop == 2)
{
thread.Abort();
}
}
/* void func(object num)//Функция потока, передаем параметр
{
{
Console.WriteLine(Thread.CurrentThread.Name + " выводит " );
Thread.Sleep(0);
}
Console.WriteLine(Thread.CurrentThread.Name + " завершился");
}
*/
}
public class Connect_to_sprecord
{
public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет.
public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR // информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона.
public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR // информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона.
public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME = 0x0000000E; // DateTime
public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона.
public const int SPR_S_OK = 0x00000000;
public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)
public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла
public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG // информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи.
public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010; // LONG // информация о количестве сигналов вызова
public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом
static string FileLogFileName = "connect_log.log";
public Connect_to_sprecord(string ch_name, int start_stop) //Конструктор получает имя функции
{
if (start_stop == 1)
{
string ChannelName = ch_name;
Console.WriteLine(ChannelName);
string FileName = "";
string TimeLine = "";
string PhoneFrom = "";
string SubPhoneFrom = "";
string StartTime = "";
bool GetLineState;
bool GetWriting;
int WaitMessage;
string TypeCall = "";
bool IsLineActive;
object ChannelInfo = "";
object IsLineActiveObj = "";
int a = 0;
SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();
SPRecordChannel.Connect(ChannelName, 1, "", "");
while (SPRecordChannel.Connected == true)
{
if (Program.glo_status_int == 1) break;
//SPRecordChannel.GetLineState(out GetLineState);
//Console.WriteLine(GetLineState);
//SPRecordChannel.GetLineState(out GetWriting);
//Console.WriteLine(GetWriting);
//export_to_file(FileLogFileName, ChannelInfo.ToString());
//SPRecordChannel.GetReadyToCall(out IsLineActive);
SPRecordChannel.GetLineState(out IsLineActive);
if (IsLineActive != true) break;
//Console.WriteLine("IsLineActive1=" + IsLineActive);
IsLineActive = true;
//while (IsLineActive == true)
//{
WaitMessage = SPRecordChannel.WaitMessage(-1);
if (WaitMessage == SPR_S_OK)
{
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);
IsLineActive = (bool)IsLineActiveObj;
if (IsLineActive == false) continue;
/*object Msg;
var eee = SPRecordChannel.PeekMessage(out Msg);
byte[] bytes = (byte[])Msg;
string str = System.Text.Encoding.ASCII.GetString(bytes);
export_to_file(FileLogFileName, str);*/
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);
FileName = ChannelInfo.ToString();
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);
TimeLine = ChannelInfo.ToString();
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);
StartTime = ChannelInfo.ToString();
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);
TypeCall = ChannelInfo.ToString();
//export_to_file(FileLogFileName, ChannelInfo.ToString());
//SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);
//export_to_file(FileLogFileName, ChannelInfo.ToString());
if ((int)TypeCall[0] == 2)
{
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);
PhoneFrom = ChannelInfo.ToString();
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);
SubPhoneFrom = ChannelInfo.ToString();
}
System.Threading.Thread.Sleep(100); // пауза 0.1 сек.
Console.WriteLine("ChannelName=" + ChannelName + ", StartTime= " + StartTime + ", TimeLine=" + TimeLine + ", FileName=" + FileName + ", TypeCall= " + TypeCall[0] + ", PhoneFrom=" + PhoneFrom + ", SubPhoneFrom=" + SubPhoneFrom);
//glo_status1 = ChannelName + " " + TypeCall[0];
if (TypeCall[0] == 2)
{
TypeCall = "входящий, номер: " + PhoneFrom + "," + SubPhoneFrom;
}
else
{
TypeCall = "исходящий";
}
Program.glo_status1 = "Канал " + ChannelName + " , звонок " + TypeCall;
}
else
{
Program.export_to_file(FileLogFileName, FileName + " " + TimeLine + " " + PhoneFrom);
}
//export_to_file(FileLogFileName, WaitMessage.ToString());
//SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);
//Console.WriteLine("Идет разговор ... ");
Console.WriteLine(WaitMessage);
System.Threading.Thread.Sleep(300); // пауза 0.1 сек.
//}
}
SPRecordChannel.Disconnect();
}
}
/* void func(object num)//Функция потока, передаем параметр
{
{
Console.WriteLine(Thread.CurrentThread.Name + " выводит " );
Thread.Sleep(0);
}
Console.WriteLine(Thread.CurrentThread.Name + " завершился");
}
*/
}
class Program
{
public const int SPR_CHANNEL_INFO_CONVERSATIONACTIVE = 0x00000001; // WordBool //Запрашивается информация о наличии сеанса связи с удаленным абонентом. Value будет содержать TRUE, если сеанс связи начался, и FALSE, если нет.
public const int SPR_CHANNEL_INFO_PHONEFROM = 0x00000007;// BSTR // информация о телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона.
public const int SPR_CHANNEL_INFO_SUBPHONEFROM = 0x00000008; // BSTR // информация о дополнительном/внутреннем телефоном номере вызывающего абонента. Value будет содержать строку с номером телефона.
public const int SPR_CHANNEL_INFO_RINGFIRSTDATETIME=0x0000000E; // DateTime
public const int SPR_CHANNEL_INFO_PHONETO = 0x00000009; // BSTR //информация о телефоном номере вызываемого абонента. Value будет содержать строку с номером телефона.
public const int SPR_S_OK = 0x00000000;
public const int SPR_CHANNEL_INFO_RECORDTYPE = 0x0000000B; // LONG // титп записи (вх, исх)
public const int SPR_CHANNEL_INFO_FILENAME = 0x0000000C; // BSTR // имя файла
public const int SPR_CHANNEL_INFO_CONVERSATIONLENG = 0x00000003;// LONG // информация о времени с момента начала сеанса связи с удаленным абонентом. Value будет содержать время в секундах с момента начала сеанса связи.
public const int SPR_CHANNEL_INFO_RINGCOUNT = 0x00000010; // LONG // информация о количестве сигналов вызова
public const int SPR_CHANNEL_INFO_CONVERSATIONDATETIME = 0x00000002; // DateTime // информация о времени начала сеанса связи с удаленным абонентом
public const int SPR_CHANNEL_INFO_RING = 0x0000000D; // WordBool
public const int SPR_CHANNEL_INFO_SUBPHONETO = 0x0000000A; // BSTR
// max число каналов =4
public static string glo_status1 = " Ожидание запуска ...";
public static int glo_status_int = 0;
static string FileLogFileName = "connect_log.log";
static void Main(string[] args)
{
/*string json1 ="{\"error\":[],\"data\":{\"status\":\"ok\",\"unicod\":42}}";
var json2 ="{\"error\":{\"id\":1,\"text\":\"error autorization\"},\"data\":[]}";
var json3 ="{\"response\":[{\"id\":269058571,\"first_name\":\"Name\",\"last_name\":\"LastName\",\"photo_50\":\"http://cs624717.vk.me/v624717571/21718/X8.jpg\"}]}";
using (var reader = new StreamReader(json1))
{
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
var objText = reader.ReadToEnd();
var jsonData = (Dictionary<string, object>)js.DeserializeObject(json1);
Console.WriteLine(jsonData);
Console.WriteLine("end");
}
return; */
// Подключаемся
//SpRecordClient SPRecordClient = new spsdksvr.SpRecordClient();
Form1 Forma = new Form1();
Forma.ShowDialog();
//Forma.SetLabelText(glo_status1);
//Forma.Show();
//Console.ReadKey();
}
class RootObject
{
public Item1 error { get; set; }
public Item2 data { get; set; }
}
class Item1
{
public string id { get; set; }
public string text { get; set; }
}
class Item2
{
public string status { get; set; }
public string unicod { get; set; }
}
public static void Connect_to_stop()
{
try
{
glo_status_int = 1;
}
catch (ThreadAbortException)
{
Console.WriteLine("Поток не прерван ");
}
}
public static void Connect_to_asp()
{
//MessageBox.Show("hello pr");
try
{
glo_status_int = 0;
SpRecordClient SPRecordClient = new SpRecordClient();
Console.WriteLine("Connect_to_asp =");
var Connect = SPRecordClient.Connect(0, "", "");
// Получаем список каналов
string ChannelList = "";
string FileLogFileName = "connect_log.log";
var Channel = SPRecordClient.GetChannelNames(out ChannelList, 1);
Char delimiter = '|';
String[] substrings = ChannelList.Split(delimiter);
//export_to_file(FileLogFileName, "1 start");
//Program p = new Program();
int i = 0;
foreach (var substring in substrings)
{
i += 1;
Console.WriteLine("substring " + substring);
//myThread t1 = new myThread(substring, 1, i);
switch (i)
{
case 1:
//Connect_to_sprecord t1 = new Connect_to_sprecord(substring, 1);
myThread t1 = new myThread(substring, 1, i);
break;
case 2:
//Connect_to_sprecord t2 = new Connect_to_sprecord(substring, 1);
myThread t2= new myThread(substring, 1, i);
break;
case 3:
//Connect_to_sprecord t3 = new Connect_to_sprecord(substring, 1);
myThread t3 = new myThread(substring, 1, i);
break;
case 4:
myThread t4 = new myThread(substring, 1, i);
//Connect_to_sprecord t4 = new Connect_to_sprecord(substring, 1);
break;
}
//Console.ReadKey();
System.Threading.Thread.Sleep(300); // пауза 0.1 сек. для инициализации
Console.WriteLine("pause ");
}
SPRecordClient.Disconnect();
//var devName = SPRecordClient.GetDeviceNames;
Console.WriteLine("pause ");
}
catch (ThreadAbortException exc)
{
if ((int)exc.ExceptionState == 0)
{
Console.WriteLine("Прерывание отменено! Код завершения: "
+ exc.ExceptionState);
Thread.ResetAbort();
}
else
Console.WriteLine("Поток прерван, код завершения "
+ exc.ExceptionState);
}
}
public static void ChannelListen()
{
string ChannelName = myThread.thread.Name;
int id_calldetails = 0;
Console.WriteLine(ChannelName);
string current_FileName = "";
string FileName = "";
int priznak_incomin_ring = 0;
string TimeLine = "";
string PhoneFrom = "";
string SubPhoneFrom = "";
DateTime StartTime;
int ring_count = 0;
bool GetLineState;
bool GetWriting;
int WaitMessage;
int TypeCall = 0;
string TypeCall_str = "";
bool IsLineActive;
object ChannelInfo = "";
object IsLineActiveObj = "";
bool incoming_ring;
object Is_incoming_ring = "";
SpRecordChannelClientW SPRecordChannel = new spsdksw.SpRecordChannelClientW();
SPRecordChannel.Connect(ChannelName, 1, "", "");
current_FileName = "";
priznak_incomin_ring = 0;
while (SPRecordChannel.Connected == true)
{
if (glo_status_int==1) break;
//SPRecordChannel.GetLineState(out GetLineState);
//Console.WriteLine(GetLineState);
//SPRecordChannel.GetLineState(out GetWriting);
//Console.WriteLine(GetWriting);
//export_to_file(FileLogFileName, ChannelInfo.ToString());
//SPRecordChannel.GetReadyToCall(out IsLineActive);
SPRecordChannel.GetLineState(out IsLineActive);
if (IsLineActive != true) break;
//Console.WriteLine("IsLineActive1=" + IsLineActive);
IsLineActive = true;
//while (IsLineActive == true)
//{
WaitMessage = SPRecordChannel.WaitMessage(-1);
if (WaitMessage == SPR_S_OK)
{
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out IsLineActiveObj);
IsLineActive = (bool)IsLineActiveObj;
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RING, out Is_incoming_ring);
incoming_ring = (bool)Is_incoming_ring;
if (incoming_ring == true)
{
if (current_FileName == "" & priznak_incomin_ring == 0)
{
priznak_incomin_ring = 1; // идет звонок оператору
}
//if (current_FileName != FileName)
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGCOUNT, out ChannelInfo);
if ((int)ChannelInfo > ring_count)
{
ring_count = (int)ChannelInfo;
Console.WriteLine("ring_count=" + ring_count);
}
if (priznak_incomin_ring == 1)
{
ring_count = 0;
priznak_incomin_ring = 2; // статус - снята трубка
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RINGFIRSTDATETIME, out ChannelInfo);
StartTime = ((DateTime)ChannelInfo);
//StartTime = StartTime.Date.ToString("yyyy-MM-dd") + " " + StartTime.Hour+":"StartTime.Minute+":"+StartTime.Second;
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);
TypeCall = (int)ChannelInfo;
//if (TypeCall != 2)
{
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);
PhoneFrom = (string)ChannelInfo;
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONEFROM, out ChannelInfo);
SubPhoneFrom = (string)ChannelInfo;
}
TypeCall_str = "входящий, номер: " + PhoneFrom + ", " + SubPhoneFrom;
List<List<string>> arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, StartTime.Date.ToString("yyyy-MM-dd") + " "+StartTime.Hour+":"+StartTime.Minute+":"+StartTime.Second,"", ChannelName[(ChannelName.Length - 1)], PhoneFrom,0,"",1,0,"");
Console.WriteLine("arr.Count=" + arr.Count);
StringBuilder builder = new StringBuilder();
if (arr.Count == 0)
Console.WriteLine("ошибка получения max(id) из таблицы calldetails");
else
{
for (int i = 0; i <= arr.Count - 1; i++)
{
if (arr[i][0] == "0" | arr[i][0] == "Error")
{
break;
}
else
{
id_calldetails = Int32.Parse(arr[i][0]);
string response = send_id("add_popup", id_calldetails, Int32.Parse((ChannelName[(ChannelName.Length - 1)]).ToString()), PhoneFrom);
Console.WriteLine(response);
Console.WriteLine("id=" + arr[i][0] + " StartTime=" + " " + StartTime + "ChannelName[(ChannelName.Length - 1)]=" + ChannelName[(ChannelName.Length - 1)] + "PhoneFrom=" + PhoneFrom + "SubPhoneFrom=" + SubPhoneFrom);
break;
}
}
}
}
}
else
{
/*if (current_FileName == "")
{
priznak_incomin_ring = 0;
Console.WriteLine("dozvon end");
}*/
/* if (current_FileName == FileName && priznak_incomin_ring == 2)
{
Console.WriteLine("FileName=" + FileName+ "Call end");
priznak_incomin_ring = 0;
}*/
}
if (IsLineActive == false)
{
if (current_FileName != "")
{
if (priznak_incomin_ring == 2) TypeCall = 2; // out call
if (priznak_incomin_ring == 0) TypeCall = 1; // in call
List<List<string>> arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 2, "", DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss"), 'c', "", 1, "", TypeCall, id_calldetails,"");
Console.WriteLine("FileName=" + FileName + "Call end");
current_FileName = "";
TypeCall_str = " Ожидание вызова ...";
glo_status1 = TypeCall_str;
}
continue;
}
if (priznak_incomin_ring == 2 & TypeCall != 2)
{
//сюда вставить продолжительность звонка
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);
FileName = ChannelInfo.ToString();
List<List<string>> arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 1, "", "", 'c', "", ring_count, FileName, TypeCall, id_calldetails,"");
Console.WriteLine("FileName=" + FileName + " ring_count=" + ring_count + " priznak_incomin_ring = 2;");
}
/*object Msg;
var eee = SPRecordChannel.PeekMessage(out Msg);
byte[] bytes = (byte[])Msg;
string str = System.Text.Encoding.ASCII.GetString(bytes);
export_to_file(FileLogFileName, str);*/
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_FILENAME, out ChannelInfo);
FileName = ChannelInfo.ToString();
if (current_FileName != FileName)
{
current_FileName = FileName;
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONLENG, out ChannelInfo);
TimeLine = ChannelInfo.ToString();
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONDATETIME, out ChannelInfo);
StartTime = (DateTime)ChannelInfo;
SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_RECORDTYPE, out ChannelInfo);
TypeCall = (int)ChannelInfo;
//export_to_file(FileLogFileName, ChannelInfo.ToString());
//SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_CONVERSATIONACTIVE, out ChannelInfo);
//export_to_file(FileLogFileName, ChannelInfo.ToString());
if (priznak_incomin_ring == 0)
{
//SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_SUBPHONETO, out ChannelInfo);
//PhoneFrom = ChannelInfo.ToString();
List<List<string>> arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 0, DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss"), "", ChannelName[(ChannelName.Length - 1)], PhoneFrom, 0, FileName, 2, 0,"");
Console.WriteLine("arr.Count=" + arr.Count);
StringBuilder builder = new StringBuilder();
if (arr.Count == 0)
{
MessageBox.Show("ошибка получения max(id) из таблицы calldetails");
}
else
{
for (int i = 0; i <= arr.Count - 1; i++)
{
if (arr[i][0] == "0" | arr[i][0] == "Error")
{
break;
}
else
{
id_calldetails = Int32.Parse(arr[i][0]);
Console.WriteLine("id=" + arr[i][0] + " StartTime=" + " " + StartTime + "ChannelName[(ChannelName.Length - 1)]=" + ChannelName[(ChannelName.Length - 1)] + "PhoneFrom=" + PhoneFrom + "SubPhoneFrom=" + SubPhoneFrom);
break;
}
}
}
}
System.Threading.Thread.Sleep(100); // пауза 0.1 сек.
//Console.WriteLine("ChannelName1=" + ChannelName + ", StartTime= " + StartTime + ", TimeLine=" + TimeLine + ", FileName=" + FileName + ", TypeCall= " + TypeCall + ", PhoneFrom=" + PhoneFrom + ", SubPhoneFrom=" + SubPhoneFrom + "ChannelName=" + ChannelName[(ChannelName.Length - 1)] + "ring_count=" + ring_count);
if (priznak_incomin_ring == 2)
{
TypeCall_str = "входящий, номер: " + PhoneFrom + ", " + SubPhoneFrom;
}
else
{
TypeCall_str = "исходящий";
}
glo_status1 = "Канал " + ChannelName + " , звонок " + TypeCall_str;
}
else
{
priznak_incomin_ring = 0;
}
}
else
{
current_FileName = "";
priznak_incomin_ring = 0;
ring_count = 0;
export_to_file(FileLogFileName, FileName + " " + TimeLine + " " + PhoneFrom);
//continue;
}
//export_to_file(FileLogFileName, WaitMessage.ToString());
//SPRecordChannel.GetInfo(SPR_CHANNEL_INFO_PHONEFROM, out ChannelInfo);
//Console.WriteLine("Идет разговор ... ");
//Console.WriteLine(WaitMessage);
System.Threading.Thread.Sleep(300); // пауза 0.1 сек.
//}
}
SPRecordChannel.Disconnect();
}
public static string CreateMD5(string input)
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
public class Request_type
{
public string type { get; set; }
public int unicod { get; set; }
public int chanel { get; set; }
public string phone { get; set; }
// public Dictionary<string, string> data { get; set; }
}
[Serializable]
public class Response_type
{
public Dictionary<string, Object> error { get; set; }
public Dictionary<string, Object> data { get; set; }
}
[Serializable]
public class ErrorList
{
public string id { get; set; }
public string text { get; set; }
}
[Serializable]
public class DataList
{
public string status { get; set; }
public string unicod { get; set; }
}
public static string send_id(string type, int unicod, int chanel, string phone)
{
// ^id_documment=_iemk_exchenge_log.id
string response = "";
// var SourceFile = "";
//string urlString = "http://smp.volmed.org.rus/json/server.php";
var Host = Form1.Service_address;
string urlString = "http://" + Host;
var SoapAction = "";
string id_service = Form1.Service_id ;
string passwrd = id_service + Form1.Service_pass;
passwrd = CreateMD5(passwrd);
urlString = urlString + "?id_service="+id_service+"&auth_key=" + passwrd.ToLower();
//string[] MyArray = { type, unicod.ToString(), chanel.ToString(), phone };
Request_type MyArray = new Request_type();
MyArray.type=type;
MyArray.unicod = unicod;
MyArray.chanel = chanel;
if (phone == null) MyArray.phone = "000000"; else MyArray.phone = phone;
var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string json = jsonSerializer.Serialize(MyArray);
export_to_file("12", "json=" + json);
var response1 = XmlHttpRequest(json, urlString);
// запись в файл
if (Int32.Parse(response1.id)>0)
{
List<List<string>> arr = namespase_mysql_connection.MySql.mysql_connect_read_status_file(Form1.Srv, Form1.DataBase, Form1.User, Form1.Passwrd, 3, "", DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss"), 'c', "", 1, "", 0, Int32.Parse(response1.id), response1.text);
}
export_to_file("12", "response error id =" + response1.id + " response text =" + response1.text);
string request = "";
var jsonDeSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
Response_type a = jsonDeSerializer.Deserialize<Response_type>(response);
ErrorList a1 = jsonDeSerializer.Deserialize<ErrorList>(response);
var DataList = jsonDeSerializer.Deserialize<DataList>(response);
Console.WriteLine("a =" + a);
return response;
}
public static ErrorList XmlHttpRequest(string Content, string urlString)
{
var ContentType = "application/json;";
// param_return=1 полный ответ, 2 урезаный
/* Get example *//*
byte[] bytes;
bytes = System.Text.Encoding.UTF8.GetBytes(get_s);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_s);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
using (HttpWebResponse response1 = (HttpWebResponse)request.GetResponse())
using (Stream stream = response1.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
*/
/* Post */
byte[] dataBytes = Encoding.UTF8.GetBytes(Content);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlString);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.ContentLength = dataBytes.Length;
request.ContentType = ContentType;
request.Method = "POST";
using (Stream requestBody = request.GetRequestStream())
{
requestBody.Write(dataBytes, 0, dataBytes.Length);
}
/*using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}*/
using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
{
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
//var json44 = JsonConvert.SerializeObject(objText, Formatting.Indented);
var myojb = js.DeserializeObject(objText);
var jsonData = (Dictionary<string, object>)js.DeserializeObject(objText);
ErrorList ErrorValue_class = new ErrorList();
foreach (KeyValuePair<string, object> keyValue in jsonData)
{
Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
if (keyValue.Key == "error")
{
string ErrorValue_string = js.Serialize(keyValue.Value);
if (ErrorValue_string == "[]")
{
ErrorValue_class.id = "0"; ErrorValue_class.text = "";
break;
}
ErrorValue_class = js.Deserialize<ErrorList>(ErrorValue_string);
Console.WriteLine("ErrorValue_class=" + ErrorValue_class.id + "ErrorValue_class.text=" + ErrorValue_class.text);
}
if (keyValue.Key == "data")
{
var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string dataValue_string = jsonSerializer.Serialize(keyValue.Value);
if (dataValue_string == "[]") break;
DataList Data_class = js.Deserialize<DataList>(dataValue_string);
Console.WriteLine("myojb2212.status=" + Data_class.status + "myojb2212.value=" + Data_class.unicod);
ErrorValue_class.id = "0"; ErrorValue_class.text = "";
return ErrorValue_class;
}
}
/* Object obj;
bool b = jsonData.TryGetValue("error", out obj);
var splashInfo = JsonConvert.DeserializeObject<ErrorList>(objText);
ErrorList myojb1 = js.Deserialize<ErrorList>(objText);
DataList myojb2 = js.Deserialize<DataList>(objText);
return myojb1;*/
return ErrorValue_class;
}
}
}
public static void export_to_file(string filename, string text)
{
FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
Console.WriteLine(text);
sw.WriteLine(text);
sw.Close();
}
/* public static void Add()
{
while (1 == 1)
{
Console.WriteLine('1');
System.Threading.Thread.Sleep(1000); // пауза 0.1 сек.
}
}
public static void Add1()
{
while (1 == 1)
{
Console.WriteLine('2');
System.Threading.Thread.Sleep(3000); // пауза 0.1 сек.
}
}*/
}
}