Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }