protected void OnCloseForm() { if (ParentFormF != null) { ParentFormF.Show(); } if (ParentFormF.GetType() == typeof(LoginPage)) { onResponse <bool> h = delegate(bool data) { }; List <KeyValuePair <string, string> > p = new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("authstr", CurrentAuthString) }; new APIRequest().makeAPIRequest("dropToken", p, h); } }
public void makeAPIRequest <T>(string method, List <KeyValuePair <string, string> > paramz, onResponse <T> handler) { try { IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(mDestIP), mPort); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Подключение к удаленному хосту socket.Connect(ipPoint); // Создаем пустую строку для параметров StringBuilder sb = new StringBuilder("/").Append(method).Append("?"); // Если есть параметры (вдруг у нас есть метод, где параметров нет) if (paramz != null) { // Загоняем все параметры запроса в строку foreach (KeyValuePair <string, string> item in paramz) { sb.Append(item.Key).Append("=").Append(item.Value).Append("&"); } } string queryString = sb.ToString(); queryString = queryString.Remove(queryString.Length - 1); // Строку с параметрами переводим в массив с байтами для // последующей передачи через сокеты byte[] data = Encoding.UTF8.GetBytes(queryString); // Отправляем данные socket.Send(data); // Получаем ответ от сервера API data = new byte[256]; // Буфер для ответа StringBuilder builder = new StringBuilder(); int bytes = 0; // количество полученных байт // Буфферизация ответа do { bytes = socket.Receive(data, data.Length, 0); builder.Append(Encoding.UTF8.GetString(data, 0, bytes)); } while (socket.Available > 0); // ... до тех пор, пока доступно еще что-то для получения // Закрываем сокет socket.Shutdown(SocketShutdown.Both); socket.Close(); /** * Мы получили ответ от сервера, а теперь хотим с ним что-то сделать, * ну, например, показать пользователю ответ */ handler(JsonConvert.DeserializeObject <T>(builder.ToString())); } catch (Exception ex) { MessageBox.Show(ex.Message); } }