/* * Copyright (C) 2017 Ortega Froysa, Nicolás * Author: Ortega Froysa, Nicolás * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include #include #include void print_help() { puts("Use `/' at the beginning to indicate a command (like in IRC)."); puts(" join -- Join a channel (channel names start with `#')."); puts(" leave -- Leave a channel (channel names start with `#')."); puts(" stats -- Give network statistics of the local node."); puts(" exit | quit -- Close the program."); puts(" help -- Show this help information."); } int main(int argc, char *argv[]) { if(argc != 2 && argc != 4) { printf("Usage: %s [ ]\n", argv[0]); return 1; } unsigned short port = atoi(argv[1]); char *connect_address = NULL; unsigned short connect_port = 0; if(argc == 4) { connect_address = argv[2]; connect_port = atoi(argv[3]); } // initialize NeoComm framework if(!NeoComm_init(port)) { fprintf(stderr, "%s\n", NeoComm_get_last_error()); return 1; } // connect to an individual node if(connect_address) NeoComm_connect(connect_address, connect_port); int run = 1; while(run) { char in[128]; printf("> "); scanf("%s", in); if(strcmp(in, "/exit") == 0 || strcmp(in, "/quit") == 0) run = 0; else if(strcmp(in, "/stats") == 0) { // get statistics struct NeoComm_stats statistics = NeoComm_get_node_stats(); printf("Good: %u\nDubious: %u\nCached: %u\nIncoming: %u\nTotal: %u\n", statistics.good, statistics.dubious, statistics.cached, statistics.incoming, statistics.total); } else if(strstr(in, "/join") == in) { const char *chan = strchr(in, '#'); if(!chan) puts("No channel name detected. Channel names start with `#'."); // join a channel NeoComm_join_channel(chan); } else if(strstr(in, "/leave") == in) { const char *chan = strchr(in, '#'); if(!chan) puts("No channel name detected. Channel names start with `#'."); // leave a channel if(!NeoComm_leave_channel(chan)) printf("%s\n", NeoComm_get_last_error()); } else if(strcmp(in, "/help") == 0) print_help(); } // deinitialize the network NeoComm_deinit(); return 0; }