static int swServer_poll_onReceive2(swReactor *reactor, swEvent *event) { int ret; swServer *serv = reactor->ptr; swFactory *factory = &(serv->factory); swEventData *buf = sw_malloc(sizeof(swEventData)); if(buf==NULL) { swTrace("Malloc fail\n"); return SW_ERR; } bzero(buf->data, sizeof(buf->data)); ret = swRead(event->fd, buf->data, SW_BUFFER_SIZE); if (ret < 0) { swTrace("Receive Error.Fd=%d.From=%d\n", event->fd, event->from_id); return SW_ERR; } else if (ret == 0) { swTrace("Close Event.FD=%d|From=%d\n", event->fd, event->from_id); sw_free(buf); return swServer_close(serv, event); } else { buf->fd = event->fd; buf->len = ret; buf->from_id = event->from_id; //swTrace("recv: %s|fd=%d|ret=%d|errno=%d\n", buf->data, event->fd, ret, errno); factory->dispatch(factory, buf); } return SW_OK; }
static int swServer_poll_onReceive(swReactor *reactor, swEvent *event) { int ret, n; swServer *serv = reactor->ptr; swFactory *factory = &(serv->factory); swEventData buf; bzero(buf.data, sizeof(buf.data)); ret = swRead(event->fd, buf.data, SW_BUFFER_SIZE); if (ret < 0) { //printf("error: %d\n", errno); return SW_ERR; } else if (ret == 0) { swTrace("Close Event.FD=%d|From=%d\n", event->fd, event->from_id); return swServer_close(serv, event); } else { buf.fd = event->fd; buf.len = ret; buf.from_id = event->from_id; //swTrace("recv: %s|fd=%d|ret=%d|errno=%d\n", buf.data, event->fd, ret, errno); n = factory->dispatch(factory, &buf); } return SW_OK; }
int swFactory_end(swFactory *factory, swEvent *event) { swServer *serv = factory->ptr; if (serv->onClose != NULL) { serv->onClose(serv, event->fd, event->from_id); } return swServer_close(serv, event); }
int swFactoryProcess_writer_excute(swFactory *factory, swEventData *resp) { int ret; swServer *serv = factory->ptr; swSendData send_data; swDataHead closeFd; //表示关闭 if (resp->info.len == 0) { close_fd: { closeFd.fd = resp->info.fd; closeFd.from_id = resp->info.from_id; //printf("closeFd.fd=%d|from_id=%d\n", closeFd.fd, closeFd.from_id); swServer_close(serv, &closeFd); } return SW_OK; } else { send_data.data = resp->data; send_data.info.len = resp->info.len; send_data.info.from_id = resp->info.from_id; send_data.info.fd = resp->info.fd; ret = factory->onFinish(factory, &send_data); if (ret < 0) { //连接已被关闭 if (errno == EBADF) { goto close_fd; } swWarn("factory->onFinish fail.fd=%d|from_id=%d|errno=%d\n", resp->info.fd, resp->info.from_id, errno); } //printf("[writer]pop.fd=%d|from_id=%d|data=%s\n", resp->info.fd, resp->info.from_id, resp->data); } return SW_OK; }
static int swServer_poll_onClose(swReactor *reactor, swEvent *event) { swServer *serv = reactor->ptr; //swFactory *factory = &(serv->factory); return swServer_close(serv, event); }
int swFactory_end(swFactory *factory, swEvent *cev) { swServer *serv = factory->ptr; return swServer_close(serv, cev); }