ip2gtp and a few changes, now can play on hte console
This commit is contained in:
		
							parent
							
								
									e866bc91f1
								
							
						
					
					
						commit
						331c626ca8
					
				
							
								
								
									
										4
									
								
								env.lisp
								
								
								
								
							
							
						
						
									
										4
									
								
								env.lisp
								
								
								
								
							|  | @ -14,3 +14,7 @@ | |||
| (load (compile-file (concatenate 'string *src-root* "packages.lisp"))) | ||||
| (load (compile-file (concatenate 'string *src-root* "gobot.lisp"))) | ||||
| (load (compile-file (concatenate 'string *src-root* "gtp.lisp"))) | ||||
| 
 | ||||
| ;(load (concatenate 'string *src-root* "packages.lisp")) | ||||
| ;(load (concatenate 'string *src-root* "gobot.lisp")) | ||||
| ;(load (concatenate 'string *src-root* "gtp.lisp")) | ||||
|  |  | |||
							
								
								
									
										5
									
								
								gobot.sh
								
								
								
								
							
							
						
						
									
										5
									
								
								gobot.sh
								
								
								
								
							|  | @ -1,3 +1,4 @@ | |||
| #!/bin/sh  | ||||
| 
 | ||||
| /usr/bin/sbcl --noinform --load /home/dan/src/my/gobot/env.lisp --eval "(progn (gtp-handler:gtp-net-client \"$1\" $2) (quit))" | ||||
| #echo $1 $2 | ||||
| /usr/bin/sbcl --noinform  --load /home/dan/src/my/gobot/packages.fasl --load /home/dan/src/my/gobot/gobot.fasl /home/dan/src/my/gobot/gtp.fasl --eval "(progn (gtp-handler:gtp-net-client \"$1\" $2) (quit))"  2>&1 /dev/null | ||||
| #/usr/bin/sbcl --noinform --load /home/dan/src/my/gobot/env.lisp --eval "(progn (gtp-handler:gtp-client) (quit))" | ||||
|  |  | |||
							
								
								
									
										7
									
								
								gtp.lisp
								
								
								
								
							
							
						
						
									
										7
									
								
								gtp.lisp
								
								
								
								
							|  | @ -2,7 +2,9 @@ | |||
| 
 | ||||
| ;(require :sb-bsd-sockets) | ||||
| 
 | ||||
| 
 | ||||
| (defparameter *quit?* nil) | ||||
| ;(defparameter *cputime*) | ||||
| 
 | ||||
| 
 | ||||
| (defun nslookup (hostname) | ||||
|  | @ -52,11 +54,11 @@ | |||
|     (if (eql socket nil) | ||||
| 	() | ||||
| 	(progn | ||||
| 	  (format t "Connection establish, playing...~%") | ||||
| ;	  (format t "Connection establish, playing...~%") | ||||
| 	  (do () | ||||
| 	      ((or (eql socket nil) (eql *quit?* t))) | ||||
| 	    (let ((cmd (tcp-read socket))) | ||||
| 	      ;	(print cmd) | ||||
| 	      	;(format t "cmd: '~a'~%'" cmd) | ||||
| 	      (let ((resp (dispatch-gtp-command cmd))) | ||||
| 	       ;(print resp) | ||||
| 		(tcp-print socket (concatenate 'string "= " resp (string #\newline) (string #\newline)))))))))) | ||||
|  | @ -84,6 +86,7 @@ | |||
|   (let* ((commands (split-string (string-upcase command-string) " ")) | ||||
| 					;(cl-ppcre:split "\\s+" (string-upcase command-string))) | ||||
| 	 (command (intern (first commands) :gtp-handler))) | ||||
|     ;(print command) | ||||
|     (case command | ||||
|       (name go-bot:*name*) | ||||
|       (version go-bot:*version*) | ||||
|  |  | |||
|  | @ -0,0 +1,226 @@ | |||
| /*
 | ||||
|  * tcpserver.c | ||||
|  * | ||||
|  * Example BSD TCP socket server.  | ||||
|  * Paired with tcpclient.c. | ||||
|  * | ||||
|  * OS: SunOS | ||||
|  * compiler: cc | ||||
|  *	% cc -o tcpserver -g tcpserver.c | ||||
|  * | ||||
|  * To run: | ||||
|  *	% tcpserver& | ||||
|  *	% tcpclient localhost  | ||||
|  * | ||||
|  * The server listen on a #define hardwired port TCPPORT (see below). | ||||
|  * It accepts some number of requests from the client and turns around | ||||
|  * and writes those buffers back to the client. | ||||
|  * | ||||
|  * This is a simple test server.  A more 'normal' server would start | ||||
|  * at boot and block in an accept call (or be coded for the UNIX inetd | ||||
|  * which is in turn different).  After the accept call, the server would | ||||
|  * fork a child to handle the connection.   This server simply handles | ||||
|  * one connection and exits. | ||||
|  */ | ||||
| 
 | ||||
| #include <sys/types.h> | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| #include <netdb.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| 
 | ||||
| #define TRUE 1 | ||||
| #define FALSE 0 | ||||
| 
 | ||||
| #define TCPPORT 10000		/* server port value */ | ||||
| #define BUFSIZE 1024		/* size of i/o buffer */ | ||||
| #define NOREADS 10		/* number of buffers transferred */ | ||||
| 
 | ||||
| /* 
 | ||||
|  * create socket | ||||
|  * bind to address | ||||
|  */ | ||||
| int initSocket() | ||||
| { | ||||
| 	struct sockaddr_in server; | ||||
| 	int sock; | ||||
| 	int optval = 1; | ||||
| 	int retVal; | ||||
| 
 | ||||
| 	/* create INTERNET,TCP socket
 | ||||
| 	*/ | ||||
| 	sock = socket(AF_INET, SOCK_STREAM, 0);  | ||||
| 
 | ||||
| 	if ( sock < 0 ) { | ||||
| 		perror("socket"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 
 | ||||
| 	server.sin_family = AF_INET; | ||||
| 	server.sin_addr.s_addr = INADDR_ANY;    | ||||
| 
 | ||||
| 	server.sin_port = htons(TCPPORT);      /* specific port */ | ||||
| 
 | ||||
| 	/* bind protocol to socket
 | ||||
| 	*/ | ||||
| 	if (bind(sock, (struct sockaddr *)  &server, sizeof(server))) { | ||||
| 		perror("bind"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 
 | ||||
| 	//retVal = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval));
 | ||||
| 	setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,(int *)&optval, sizeof(optval)) ; | ||||
| 	return(sock); | ||||
| } | ||||
| 
 | ||||
| void doWrite(int sock, char *buf) | ||||
| { | ||||
| 	int len = strlen(buf); | ||||
| 	char slen[8]; | ||||
| 	int rc; | ||||
| 	sprintf(slen, "%04d", len); | ||||
| 	rc = write(sock, slen, 4);  | ||||
| 	if (rc < 0) { | ||||
| 		perror("write"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	write(sock, buf, len); | ||||
| 	if (rc < 0) { | ||||
| 		perror("write"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| } | ||||
| 		 | ||||
| 
 | ||||
| /* read from socket. Read call issued to kernel
 | ||||
|  * may return with incomplete data. This routine | ||||
|  * must check that and force a complete read. | ||||
|  */ | ||||
| void doRead(int sock, char *buf) | ||||
| { | ||||
| 	register int i; | ||||
| 	int rc; | ||||
| 	char *bpt; | ||||
| 	int count; | ||||
| 	int amountNeeded; | ||||
| 	int amtread; | ||||
| 	 | ||||
| 	bpt = buf; | ||||
| 
 | ||||
| 	rc =0; | ||||
| 	while (rc < 4) { | ||||
| 		rc += read(sock, bpt, 4-rc); | ||||
| 		bpt += rc; | ||||
| 	} | ||||
| 	amountNeeded = atoi(buf); | ||||
| 	count = amountNeeded; | ||||
| 	bpt = buf; | ||||
| 
 | ||||
| 	amtread = 0; | ||||
| 
 | ||||
| again: | ||||
| 	if ( (rc = read(sock,bpt,count)) < 0 ) { | ||||
| 		perror("doRead: reading socket stream"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	amtread += rc; | ||||
| 
 | ||||
| 	if ( amtread < amountNeeded ) { | ||||
| 		count = count - rc;	 | ||||
| 		bpt = bpt + rc; | ||||
| 		goto again; | ||||
| 	} | ||||
| 	buf[amountNeeded] = '\0'; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main(int argc,char **argv) | ||||
| { | ||||
| 	int sock; | ||||
| 	int size; | ||||
| 	char buf[BUFSIZE]; | ||||
| 	int msgsock; | ||||
| 	struct sockaddr_in gotcha; | ||||
| 	int rc; | ||||
| 	int i; | ||||
| 	char *cp; | ||||
| 	char port[16]; | ||||
| 	pid_t pid; | ||||
| 	 | ||||
| 
 | ||||
| 	 | ||||
| 
 | ||||
| 	sock = initSocket(); | ||||
| 
 | ||||
| 	/* tcp starts listening for connections
 | ||||
| 	*/ | ||||
| 	rc = listen(sock,5); | ||||
| 	if ( rc < 0) { | ||||
| 		perror("listen"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	/* accept one connection, will block here.
 | ||||
| 	*/ | ||||
| 	size = sizeof (struct sockaddr_in); | ||||
| 	pid = fork(); | ||||
| 	if (pid == 0) { | ||||
| 		//sprintf(buf, "/home/dan/src/my/gobot/gobot.sh 127.0.0.1 %d 2>&1 /dev/null\n",  TCPPORT);
 | ||||
| 		sprintf(buf, "/usr/bin/sbcl --noinform --load /home/dan/src/my/gobot/packages.fasl  --load /home/dan/src/my/gobot/gobot.fasl  --load /home/dan/src/my/gobot/gtp.fasl --eval '(progn (gtp-handler:gtp-net-client \"127.0.0.1\" %d) (quit))' \n", TCPPORT); | ||||
| 
 | ||||
| 		//printf("%s\n", buf);
 | ||||
| 		system(buf); | ||||
| 		return 0; | ||||
| 	} | ||||
| 	/* gotcha and size are returned when the connection comes in.
 | ||||
|   	 * When the client calls connect, and a connection occurs, accept | ||||
|  	 * returns.  gotcha holds the client ip address and client port value. | ||||
| 	 * NOTE: the size parameter is a *pointer*, not an integer.  The | ||||
| 	 * kernel returns the size of the socket structure in gotcha. | ||||
| 	 * This is called: "call by value-result". You have to pass in | ||||
| 	 * the size of the structure and the kernel returns the true result. | ||||
| 	 * For tcp/ip sockets the size never changes.  For unix sockets | ||||
| 	 * it may change. | ||||
| 	 */ | ||||
| 	msgsock = accept(sock, (struct sockaddr *) &gotcha, (socklen_t*)&size);	 | ||||
| 	if (msgsock < 0 ) { | ||||
| 		perror("accept"); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 
 | ||||
| 	/* read and echo so many packets
 | ||||
| 	*/ | ||||
| 	/*for ( i = 0; i < NOREADS; i++) {
 | ||||
| 		doRead(msgsock, buf, BUFSIZE); | ||||
| 		rc = write(msgsock, buf, BUFSIZE);  | ||||
| 		if ( rc < 0 ) { | ||||
| 			perror("write"); | ||||
| 			exit(1); | ||||
| 		} | ||||
| 	}*/ | ||||
| 	do { | ||||
| 		cin.getline(buf, BUFSIZE); | ||||
| 		//printf("%s", buf);
 | ||||
| 		doWrite(msgsock, buf);				 | ||||
| 		buf[0] = '\0'; | ||||
| 		doRead(msgsock, buf); | ||||
| 		//printf("%s", buf);
 | ||||
| 		cout << buf; | ||||
| 		buf[0] = '\0'; | ||||
| 	} while (1); | ||||
| 
 | ||||
| 	/* close sockets
 | ||||
| 	*/ | ||||
| 	close(msgsock); | ||||
| 	close(sock); | ||||
| 
 | ||||
| 	return(0); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue