예제 #1
0
int main(int argc, char **argv)
{
#ifdef WIN32
	WSADATA wsa_data;
	WSAStartup(0x0201, &wsa_data);
#endif
    try
	{ 
        SimpleEventLoop loop;
        
        //1. listen on PORT
        HelloWorldListener tcp_listener( &loop);
        tcp_listener.start_listen_on_tcp( CString("0.0.0.0:%d", PORT).c_str() );
 
        //2. also we handle ctrl-C
        QuitSignalHandler control_c_handler(&loop);
        control_c_handler.start_handle_signal( SIGINT );

        //3. also listen on a unix domain socket
        HelloWorldListener un_listener( &loop);
        un_listener.start_listen_on_un( ".haha" );

        //4. the main loop
        loop.run();

        printf("done\n");

	}
	catch (std::exception& ex)
	{
		LOG_ERROR("Exception in main(): %s\n", ex.what());
        return 1;
	}
	catch (...)
	{
		LOG_ERROR("Unknown exception in main()\n");
        return 1;
	}
    return 0;
}
예제 #2
0
파일: lexer.c 프로젝트: IvanLogvinov/soar
void get_next_char (void) {
  char *s;

#ifdef USE_TCL
  /* Soar-Bugs #54, TMH */
  if ( current_agent(alternate_input_exit) &&
      (current_agent(alternate_input_string) == NULL) &&
      (current_agent(alternate_input_suffix) == NULL)   ) {
    current_agent(current_char) = EOF_AS_CHAR;
    control_c_handler(0);
    return;
  }
#endif

  if (current_agent(using_input_string)) {
    if (*(current_agent(input_string))!='\0')
      current_agent(current_char) = *(current_agent(input_string)++);
    return;
  }

#ifdef USE_X_DISPLAY
  if (x_input_buffer != NIL) {
    current_agent(current_char) = x_input_buffer[x_input_buffer_index++];
    if (current_agent(current_char) == '\n') {
      x_input_buffer = NIL;
    }
  } else {
    current_agent(current_char) = current_agent(current_file)->buffer 
                           [current_agent(current_file)->current_column++];
  }
#elif defined(USE_TCL)
  if (current_agent(alternate_input_string) != NULL)
    {
      current_agent(current_char) = *current_agent(alternate_input_string)++;

      if (current_agent(current_char) == '\0') 
        {
          current_agent(alternate_input_string) = NIL;
          current_agent(current_char) = 
            *current_agent(alternate_input_suffix)++;
        }
    }
  else if (current_agent(alternate_input_suffix) != NULL)
    {
      current_agent(current_char) = *current_agent(alternate_input_suffix)++;

      if (current_agent(current_char) == '\0') 
        {
          current_agent(alternate_input_suffix) = NIL;

          /* Soar-Bugs #54, TMH */
          if ( current_agent(alternate_input_exit) ) {
            current_agent(current_char) = EOF_AS_CHAR;
            control_c_handler(0);
            return;
	  }

          current_agent(current_char) = current_agent(current_file)->buffer 
            [current_agent(current_file)->current_column++];
        }
    } 
  else 
    {
      current_agent(current_char) = current_agent(current_file)->buffer 
        [current_agent(current_file)->current_column++];
    }
#elif _WINDOWS
  if (current_agent(current_file)->file==stdin) { 
    switch (current_agent(current_line)[current_agent(current_line_index)]) {
      case EOF_AS_CHAR:
      case 0:
			if (!AvailableWindowCommand()) {
	  			current_agent(current_line)[current_agent(current_line_index)=0]=current_agent(current_char)=EOF_AS_CHAR;
		 	    break;
			} else {
	  			s=GetWindowCommand();
	  			strcpy(current_agent(current_line),s+1);
	  			if (current_agent(print_prompt_flag)=(s[0]=='1')) 
			    print("%s",s+1);
	  			free(s);
	  			current_agent(current_line_index)=0;
			}
      default:
			current_agent(current_char)=current_agent(current_line)[current_agent(current_line_index)++];
			break;
    }
  } else 
    current_agent(current_char) = current_agent(current_file)->buffer 
			   [current_agent(current_file)->current_column++];
#else
  current_agent(current_char) = current_agent(current_file)->buffer 
                           [current_agent(current_file)->current_column++];
#endif

  if (current_agent(current_char)) return;

  if ((current_agent(current_file)->current_column == BUFSIZE) &&
      (current_agent(current_file)->buffer[BUFSIZE-2] != '\n') &&
      (current_agent(current_file)->buffer[BUFSIZE-2] != EOF_AS_CHAR)) {
    char msg[512];
    sprintf (msg,
	     "lexer.c: Error:  line too long (max allowed is %d chars)\nFile %s, line %lu\n",
	     MAX_LEXER_LINE_LENGTH, current_agent(current_file)->filename,
	     current_agent(current_file)->current_line);
    abort_with_fatal_error(msg);
  }

  s = fgets (current_agent(current_file)->buffer, BUFSIZE, current_agent(current_file)->file);

  if (s) {
    current_agent(current_file)->current_line++;
    if (reading_from_top_level()) {
      tell_printer_that_output_column_has_been_reset ();
      if (current_agent(logging_to_file))
        print_string_to_log_file_only (current_agent(current_file)->buffer);
    }
  } else {
    /* s==NIL means immediate eof encountered or read error occurred */
    if (! feof(current_agent(current_file)->file)) {
      if(reading_from_top_level()) {
#ifndef _WINDOWS
        control_c_handler(0);  /* AGR 581 */
#endif
        return;
      } else {
        print ("I/O error while reading file %s; ignoring the rest of it.\n",
               current_agent(current_file)->filename);
      }
    }
    current_agent(current_file)->buffer[0] = EOF_AS_CHAR;
    current_agent(current_file)->buffer[1] = 0;
  }
  current_agent(current_char) = current_agent(current_file)->buffer[0];
  current_agent(current_file)->current_column = 1;
}