예제 #1
0
        public void Start(int port, IRev _revProc, bool singleModel = true)
        {
            mRevProc     = _revProc;
            mSingleModel = singleModel;

            IPAddress ipa = IPAddress.Any;

            mSocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint endpoint = new IPEndPoint(ipa, port);

            mSocketServer.Bind(endpoint);
            mSocketServer.Listen(param.MAX_LISTEN_NUM);

            if (mSingleModel)
            {
                onMiss();
            }
            else
            {
                Thread threadSocket = new Thread(() => {
                    while (true)
                    {
                        Accept();
                    }
                });
                threadSocket.IsBackground = true;
                threadSocket.Start();
            }
        }
예제 #2
0
        public connect(Socket _conn, IRev _IServerRev, IRev _IClientRev, IMiss _IMiss = null)
        {
            mIServerRev = _IServerRev;
            mIClientRev = _IClientRev;
            mIMiss      = _IMiss;

            mConnectNormal = true;
            mConn          = _conn;

            if (null == _IClientRev && null == mIServerRev)
            {
                return;
            }
            Thread revThread = new Thread(_OnRev);

            revThread.IsBackground = true;
            revThread.Start();
        }
예제 #3
0
        public void Start(byte mark, string IP, int prort, IRev revProc)
        {
            IPAddress  address  = IPAddress.Parse(IP);
            IPEndPoint endpoint = new IPEndPoint(address, prort);
            Socket     so       = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


            so.Connect(endpoint);
            byte[] by = new byte[1];
            by[0] = mark;
            so.Send(by, 1, 0);
            if (null == revProc)
            {
                mReceiver = new receiver();
            }
            else
            {
                mReceiver = null;
            }
            mConnect = new connect(so, null, revProc);
        }
예제 #4
0
        public void rev(byte[] recvBuf, IRev Fun)
        {
            if (mNewMsgMark.isNewMsgMark(recvBuf))
            {
                mRevSize        = 0;
                mRevData.msglen = (int)BitConverter.ToUInt32(recvBuf, param.guidLEN);
                mRevData.cmd    = BitConverter.ToUInt32(recvBuf, param.posCmd);
                if (mRevData.msglen > mRevData.recvBytes.Length)
                {
                    mRevData.recvBytes = new byte[mRevData.msglen];
                }

                if (mRevData.msglen <= param.newMsgMaxDataSpace)
                {
                    Array.Copy(recvBuf, param.posMsg, mRevData.recvBytes, 0, mRevData.msglen);
                    MsgFinish(Fun);
                }
                return;
            }


            int CpySize = param.socketRevBufSize;

            if (mRevSize + param.socketRevBufSize > mRevData.msglen)
            {
                CpySize = (int)(mRevData.msglen - mRevSize);
            }

            Array.Copy(recvBuf, 0, mRevData.recvBytes, mRevSize, CpySize);
            mRevSize = mRevSize + (uint)CpySize;

            if (mRevSize != mRevData.msglen)
            {
                return;
            }

            MsgFinish(Fun);
        }
예제 #5
0
 void MsgFinish(IRev Fun)
 {
     Fun.onRevData(mRevData);
     mRevData.msglen = 0;
     mRevSize        = 0;
 }