odissey: implement first vital C-P-S-P-C interaction

This commit is contained in:
Dmitry Simonenko 2016-11-11 15:08:24 +03:00
parent eb19ed9f76
commit 9079d68ba7
2 changed files with 38 additions and 8 deletions

View File

@ -57,7 +57,9 @@ int od_feerror(odclient_t *client, char *fmt, ...)
return -1; return -1;
rc = ft_write(client->io, (char*)stream->s, rc = ft_write(client->io, (char*)stream->s,
so_stream_used(stream), 0); so_stream_used(stream), 0);
return rc; if (rc < 0)
return -1;
return 0;
} }
static int static int
@ -121,5 +123,7 @@ int od_feauth(odclient_t *client)
return -1; return -1;
rc = ft_write(client->io, (char*)stream->s, rc = ft_write(client->io, (char*)stream->s,
so_stream_used(stream), 0); so_stream_used(stream), 0);
return rc; if (rc < 0)
return -1;
return 0;
} }

View File

@ -126,20 +126,46 @@ void od_router(void *arg)
/* link server with client */ /* link server with client */
client->server = server; client->server = server;
sostream_t *stream = &client->stream;
char type;
while (1) { while (1) {
rc = od_read(client->io, &client->stream); /* read client request */
rc = od_read(client->io, stream);
if (rc == -1) { if (rc == -1) {
od_feclose(client); od_feclose(client);
return; return;
} }
char type = *client->stream.s; type = *client->stream.s;
od_log(&pooler->od->log, "C: %c", type); od_log(&pooler->od->log, "C: %c", type);
/* write(server, packet) */ if (type == 'X') {
/* client graceful shutdown */
od_feclose(client);
break;
}
/* write request to server */
rc = ft_write(server->io, (char*)stream->s,
so_stream_used(stream), 0);
if (rc < 0) {
}
while (1) { while (1) {
/* packet = read(server) */ /* read responce from server */
/* write(client, packet) */ rc = od_read(server->io, stream);
/* if Z break */ if (rc == -1) {
}
type = *stream->s;
od_log(&pooler->od->log, "S: %c", type);
/* write responce to client */
rc = ft_write(client->io, (char*)stream->s,
so_stream_used(stream), 0);
if (rc < 0) {
}
if (type == 'Z')
break;
} }
} }
} }