Пример #1
0
static void websocket_refresh(struct worker* client, struct var* set[], size_t n){
	struct json_object* root = json_object_new_object();
	json_object_object_add(root, "vars", serialize_vars_set(SERIALIZE_SLIM, set, n));
	json_object_object_add(root, "type", json_object_new_string("refresh"));

	const char* data = json_object_to_json_string_ext(root, 0);
	websocket_send(client, data, strlen(data));

	json_object_put(root);
}
Пример #2
0
static void websocket_hello(struct worker* client){
	struct json_object* root = json_object_new_object();
	json_object_object_add(root, "vars", serialize_vars_all(SERIALIZE_FULL));
	json_object_object_add(root, "type", json_object_new_string("hello"));

	const char* data = json_object_to_json_string_ext(root, 0);
	websocket_send(client, data, strlen(data));

	json_object_put(root);
}
Пример #3
0
void controller_execute(controller ctrl)
{
  struct timespec time;
  float dt;
  
  char header[2048];
  size_t header_size = 0;
  
  int16_t * data;
  int data_len;
  size_t data_size;
  
  clock_gettime(CLOCK_REALTIME_COARSE, & time);

  // time (secs) since last heartbeat
  dt = (time.tv_sec - ctrl->heartbeat_time.tv_sec);
  dt += (time.tv_nsec - ctrl->heartbeat_time.tv_nsec) / 1e9;

  if (dt >= 0.25f) {
    _controller_create_header(ctrl, header, & header_size);

    // reset sample count
    ctrl->heartbeat_num_samples = 0;
    
    // update time
    ctrl->heartbeat_time.tv_sec = time.tv_sec;
    ctrl->heartbeat_time.tv_nsec = time.tv_nsec;
  }

  // give control to the scanner
  scanner_execute(ctrl->scan, ctrl->dem, ctrl->r);

  // block until new output is available
  demod_pop_and_lock(ctrl->dem, & data, & data_len);
  
  data_size = data_len * sizeof(int16_t);

  // send to client
  websocket_send(ctrl->ws, header, header_size, data, data_size);

  demod_release(ctrl->dem);

  // keep count
  ctrl->heartbeat_num_samples += data_len;
}
Пример #4
0
static int tapi2p_callback(struct libwebsocket_context *ctx,
						   struct libwebsocket *wsi,
						   enum libwebsocket_callback_reasons reason,
						   void* user,
						   void* in,
						   size_t len)
{
	switch(reason)
	{
		case LWS_CALLBACK_ESTABLISHED:
			lwsl_notice("Handshaked with client.\n");
			libwebsocket_callback_on_writable(ctx, wsi);
			break;
		case LWS_CALLBACK_SERVER_WRITEABLE:
		{
			if(corefd==-1)
			{
				char* conn_reply="Could not connect to tapi2p. Is tapi2p core running?";
				websocket_send(wsi, conn_reply, strlen(conn_reply));
			}
			else if(!welcome_message_sent)
			{
				struct config* conf=getconfig();
				if(conf)
				{
					struct configitem* ci=config_find_item(conf, "Nick", "Account");
					if(ci && ci->val)
					{
						json_t *root=json_object();
						json_object_set_new(root, "cmd", json_integer(Message));
						json_object_set_new(root, "data", json_string("Welcome to tapi2p, "));
						json_object_set_new(root, "own_nick", json_string(ci->val));
						char *jsonstr=json_dumps(root, 0);
						welcome_message_sent=1;
						websocket_send(wsi, jsonstr, strlen(jsonstr));
						free(jsonstr);
						json_decref(root);
						lwsl_notice("Sent welcome message.\n");
					}
				}
			}
			else if(unsent_data>0)
			{
				pthread_mutex_lock(&datalock);
				while(unsent_data)
				{
					char* data=data_to_send[--unsent_data];
					printf("Sent: %s\n", data);
					websocket_send(wsi, data, strlen(data));
					free(data);
				}
				pthread_mutex_unlock(&datalock);
			}
			usleep(10000);
			libwebsocket_callback_on_writable(ctx, wsi);
			break;
		}
		case LWS_CALLBACK_CLOSED:
			lwsl_notice("Connection to client closed.\n");
			break;
		case LWS_CALLBACK_RECEIVE:
			lwsl_notice("Message from client\n");
			printf("Json: %s %d\n", (char*)in, len);
			send_json((char*) in, len);
			break;

	}
	return 0;
}