esp_err_t event_handler(void *ctx, system_event_t *event)
{
	   if( event->event_id == SYSTEM_EVENT_STA_GOT_IP )
	    {

		 wifi_connect=1;
		 check_one_time=1;
	    }

		 if( event->event_id == SYSTEM_EVENT_STA_DISCONNECTED )
		 {

          printf("wifi_disconnected\n");
          wifi_connect=0;
          check_one_time=0;
		 }
          return ESP_OK;

}

void task_wifi()
{
	while(1)
	{
		if(wifi_connect==0)
		{

		    nvs_flash_init();
			    printf("Reconnecting\n");
		    tcpip_adapter_init();

		//    ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
		    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
		    ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
		    ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
		    ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );

		    ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) );
		    ESP_ERROR_CHECK( esp_wifi_start() );
		    ESP_ERROR_CHECK( esp_wifi_connect() );

		    vTaskDelay(2000 / portTICK_RATE_MS);
		}


		if(wifi_connect==1)
		{

		  printf("connected\n");


		  const struct addrinfo hints = {
		         .ai_family = AF_INET,
		         .ai_socktype = SOCK_STREAM,
		     };
		     struct addrinfo *res;
		     struct in_addr *addr;
		     int s, r;
		     char recv_buf[250];

		    // while(1)
		     {
		         /* Wait for the callback to set the CONNECTED_BIT in the
		            event group.
		         */
//			         xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
//			                             false, true, portMAX_DELAY);
//			         ESP_LOGI(TAG, "Connected to AP");

		         int err = getaddrinfo(WEB_SERVER, "8080", &hints, &res);

		         if(err != 0 || res == NULL) {
		             ESP_LOGE(TAG, "DNS lookup failed err=%d res=%p", err, res);
		             vTaskDelay(1000 / portTICK_PERIOD_MS);
		             continue;
		         }

		         /* Code to print the resolved IP.

		            Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */
		         addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
		         ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr));

		         s = socket(res->ai_family, res->ai_socktype, 0);
		         if(s < 0) {
		             ESP_LOGE(TAG, "... Failed to allocate socket.");
		             freeaddrinfo(res);
		             vTaskDelay(1000 / portTICK_PERIOD_MS);
		             continue;
		         }
		     //   ESP_LOGI(TAG, "... allocated socket\r\n");

		         if(connect(s, res->ai_addr, res->ai_addrlen) != 0) {
		             ESP_LOGE(TAG, "... socket connect failed errno=%d", errno);
		             close(s);
		             freeaddrinfo(res);
		             vTaskDelay(4000 / portTICK_PERIOD_MS);
		             continue;
		         }

		       //  ESP_LOGI(TAG, "... connected");
		         freeaddrinfo(res);

		         if (write(s, REQUEST, strlen(REQUEST)) < 0) {
		             ESP_LOGE(TAG, "... socket send failed");
		             close(s);
		             vTaskDelay(4000 / portTICK_PERIOD_MS);
//			     
		             continue;
		         }
		     //    ESP_LOGI(TAG, "... socket send success");

		         /* Read HTTP response */

		         do {
				bzero(recv_buf, sizeof(recv_buf));
				r = read(s, recv_buf, sizeof(recv_buf)-1);
				recv_buf[r] = '\0';
				printf("DATA FROM SERVER = %s\n",recv_buf);

		         }while(r > 0);
		         memset(recv_buf,0,sizeof(recv_buf));
		         memset(SENDING_DATA,0,sizeof(SENDING_DATA));
		         memset(REQUEST,0,sizeof(REQUEST));


		         close(s);
		     
		         for(int countdown = wait_count; countdown >= 0; countdown--) {
		             ESP_LOGI(TAG, "%d... ", countdown);
		             vTaskDelay(1000 / portTICK_PERIOD_MS);
			         }
		       //  ESP_LOGI(TAG, "Starting again!");
			     }


			 vTaskDelay(1000 / portTICK_RATE_MS);
		}
	}

}
