Exemplo n.º 1
0
std::unique_ptr<JsonObject> JsonParser::parseJson( JsonScanner & scanner ) {
	JsonToken token;
	try {
		token = scanner.getNextToken();
	}
	catch ( const std::exception & e ) {
		throw;
	}

	std::vector<JsonValue *> * members = new std::vector<JsonValue *>();

	switch( token.getType() ) {
	case JsonTypes::OPEN_BRACE:
		try {
			parseMembers( scanner, members );
		}
		catch ( const std::exception & e ) {
			delete members;
			throw;
		}
		return std::unique_ptr<JsonObject>( new JsonObject( members ) );
		break;
	default:
		delete members;
		throw JsonParsingException();
		break;
	}
}
Exemplo n.º 2
0
int main(int argc, char * argv[])
{
	if(argc < 2)
	{
		cout<<"please enter a file name\n";
		exit(-1);
	}
	char * filename = argv[1];
	FILE * comfile = fopen(filename,"r");
	if(!comfile)
	{
		perror("failed to open command file");
		exit(-1);
	}

	map<int,int> ports = parseMembers();
	map<int,int> nodeToSocket;
	
	map<int, int>::const_iterator endports = ports.end();
	for(map<int, int>::const_iterator it = ports.begin(); it != endports; it++) 
	{
		nodeToSocket[it->first] = new_socket();
		connect(nodeToSocket[it->first],it->second);
	}
	ports.clear();
	s_send(nodeToSocket[0],"-1");
	
	char com[BUFFER_SIZE];
	char tmp[BUFFER_SIZE];
	while(fgets(com, BUFFER_SIZE,comfile) != NULL){
		strcpy(tmp,com);
		unsigned int sleeptime = atoi(strtok(com,"\n:"));
		sleeptime = sleeptime * 1000;
		usleep(sleeptime);
		int nodeID = atoi(strtok(NULL,"\n:"));

		//locate the 2nd colon for commandID options
		int i,j;
		for(i = 0,j = 0; j < 2 && i < BUFFER_SIZE; i++){
			if(tmp[i] == ':')
				j++;
		}

		char * comAndOpt = tmp + i;
		char moretmp[BUFFER_SIZE];
		strcpy(moretmp,"0:C:");
		strcat(moretmp,strtok(comAndOpt,"\n")); //strtok strips new line from command
		//send comAndOpt to nodeID
		printf("sending %s to %d\n",moretmp,nodeID);
		s_send(nodeToSocket[nodeID],moretmp);
	}
	return 0;
}
Exemplo n.º 3
0
JsonValue * JsonParser::parseValue( JsonScanner & scanner, 
		const JsonToken & token, const std::string & name ) {
	int iValue;
	double rValue;
	bool bValue;
	std::vector<JsonValue *> * values;
	std::vector<JsonValue *> * members;

	switch( token.getType() ) {
		case JsonTypes::INTEGER:
			iValue = atoi( token.getToken().c_str() );
			return new JsonValue( name, iValue );
			break;
		case JsonTypes::REAL:
			rValue = atof( token.getToken().c_str() );
			return new JsonValue( name, rValue );
			break;
		case JsonTypes::BOOLEAN:
			bValue = token.getToken() == "true" ? true : false;
			return new JsonValue( name, bValue );
			break;
		case JsonTypes::STRING:
			return new JsonValue( name, token.getToken() );
			break;
		case JsonTypes::OPEN_BRACKET:
			values = new std::vector<JsonValue *>();
			try {
				parseArray( scanner, values );
			} catch( const std::exception & e ) {
				delete values;
				throw;
			}
			return new JsonValue( name, values );
			break;
		case JsonTypes::NULLTYPE:
			break;
		case JsonTypes::OPEN_BRACE:
			members = new std::vector<JsonValue *>();
			try {
				parseMembers( scanner, members );
			} catch( const std::exception & e ) {
				delete members;
				throw;
			}
			return new JsonValue( name, new JsonObject( members ) );
			break;
		default:
			throw ValueParsingException();
			break;
	}
}
Exemplo n.º 4
0
void JsonParser::parseMembers( JsonScanner & scanner, std::vector<JsonValue *> * members ) {
	JsonValue * value;

	try {
		value = parsePair( scanner );
	}
	catch ( const std::exception & e ) {
		throw;
	}

	members->push_back( value );

	JsonToken token;
	try {
 		token = scanner.getNextToken();
	}
	catch ( const std::exception & e ) {
		throw;
	}

	switch( token.getType() ) {
		case JsonTypes::COMMA:
			try {
				parseMembers( scanner, members );
			}
			catch ( const std::exception & e ) {
				throw;
			}
			break;
		case JsonTypes::CLOSE_BRACE:
			return;
		default:
			throw MemberParsingException();
			break;
	}
}