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