public bool ConnectServer(ServerInfo serverInfo) { Server server = GetServer(); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); NetSocket connectSocketCtx = new NetSocket(this); connectSocketCtx.sock = sock; connectSocketCtx.SetSocketType(NetSocketType.CONNECT_SERVER_SOCKET); serverInfo.socketCtx = connectSocketCtx; connectSocketCtx.SetRemoteServerInfo(serverInfo); connectSocketCtx.dataTransMode = serverInfo.dataTransMode; socketMap[connectSocketCtx.GetID()] = connectSocketCtx; if (connectSocketCtx.sock == null) { connectSocketCtx.SetSocketState(SocketState.INIT_FAILD); SocketError(connectSocketCtx); //LOG4CPLUS_ERROR(log.GetInst(), "初始化Socket失败,错误代码:" << _GetLastError()); return(false); } connectSocketCtx.UpdataTimeStamp(); Packet packet = connectSocketCtx.CreatePacket(0); // 开始连接服务器 connectSocketCtx.SetSocketState(SocketState.CONNECTTING_SERVER); server.IocpPostConnect(packet); return(true); }
void ConnectedServerTask(object data) { Packet packet = (Packet)data; NetSocket socketCtx = packet.socketCtx; Server server = GetServer(); if (CheckingPacketVaild(packet) == 0) { return; } if (socketCtx.sock.Connected == false) { SocketError(socketCtx); return; } socketCtx.sock.EndConnect(packet.ar); socketCtx.SetSocketState(SocketState.CONNECTED_SERVER); socketCtx.UpdataTimeStamp(); int bufSize = socketCtx.dePacketor.GetMaxBufferSize(); if (packet.packBuf.len != bufSize) { packet = socketCtx.CreatePacket(bufSize); } socketCtx.dePacketor.UnPack(SocketEvent.EV_SOCKET_CONNECTED, socketCtx); server.IocpPostRecv(packet); }
void StartInitIocpAcceptTask(object data) { Server server = GetServer(); Packet packet; NetSocket newSocketCtx; // 为AcceptEx 准备参数,然后投递AcceptEx I/O请求 for (int i = 0; i < 20; i++) { newSocketCtx = new NetSocket(this); newSocketCtx.SetSocketType(NetSocketType.LISTEN_CLIENT_SOCKET); packet = newSocketCtx.CreatePacket(0); server.IocpPostAccept(packet); } }
void OnAcceptCallBack(IAsyncResult ar) { Packet packet = ar.AsyncState as Packet; NetSocket newSocketCtx = packet.socketCtx; //接收结果 newSocketCtx.sock = listenSocket.sock.EndAccept(ar); newSocketCtx.SetSocketState(SocketState.CONNECTED_CLIENT); newSocketCtx.UpdataTimeStamp(); Packet newPacket = newSocketCtx.CreatePacket(dePacketor.GetMaxBufferSize()); serverTaskMgr.PostServerMessage(ServerMessage.SMSG_ACCEPT_CLIENT, newPacket); //继续接受客户端的请求 serverTaskMgr.PostSingleIocpAccpetTask(packet); }
void AcceptedClientTask(object data) { Packet packet = (Packet)data; NetSocket socketCtx = packet.socketCtx; Server server = GetServer(); // 把这个有效的客户端信息,加入到socketMap中去 socketMap[socketCtx.GetID()] = socketCtx; socketCtx.SetPack(packet.buf, 0, packet.transferedBytes); socketCtx.dePacketor.UnPack(SocketEvent.EV_SOCKET_ACCEPTED, socketCtx); socketCtx.RemovePack(); int bufSize = socketCtx.dePacketor.GetMaxBufferSize(); if (packet.packBuf.len != bufSize) { packet = socketCtx.CreatePacket(bufSize); } server.IocpPostRecv(packet); }