Example #1
0
        protected int AddNewClient(Socket scH)
        {
            if (NTC.MAX_CONNECT <= m_vCln.Count)
            {
                return(NTC.EFAIL);
            }

            EndPoint sdH   = scH.RemoteEndPoint;
            uint     netId = PGN.Packet.SocketId(ref scH);
            TcpCln   pCln  = new TcpCln(netId);

            pCln.Create(this, scH, sdH);

            //string guid = Guid.NewGuid().ToString().ToUpper();

            string crpKey = netId.ToString() + " PGN_ENCRYPTION_KEY_BYTE_STRING";

            PGLog.LOGI("AddNewClient::" + crpKey);

            pCln.Send(crpKey, NTC.GP_DEFAULT);

            m_vCln.Add(pCln);
            pCln.Recv();

            return(NTC.OK);
        }
Example #2
0
        protected void IoRecv(IAsyncResult iar)
        {
            int    err  = NTC.OK;
            TcpCln pCln = (TcpCln)iar.AsyncState;
            int    rcn  = -1;

            try
            {
                rcn = pCln.m_scH.EndReceive(iar);
            }
            catch (SocketException e0)
            {
                PGLog.LOGW("IoRecv::SocketException::" + e0.ToString());
                err = NTC.EFAIL_SOCK;
                goto ERR;
            }
            catch (Exception e1)
            {
                PGLog.LOGW("IoRecv::Exception::" + e1.ToString());
                err = NTC.EFAIL;
                goto ERR;
            }

            if (pCln != this)
            {
                PGLog.LOGW("IoRecv::Different object");
                err = NTC.EFAIL;
                goto ERR;
            }

            // closed socket
            if (-1 == rcn || 0 == rcn)
            {
                PGLog.LOGW("IoRecv::disconnected");

                lock (m_oLock)
                {
                    IoEvent(NTC.EV_CLOSE, NTC.OK, pCln.m_scH, this);
                }
                CloseSocket();
                return;
            }


            lock (m_oLock)
            {
                PGLog.LOGW("IoRecv::Received:" + rcn);
                IoEvent(NTC.EV_RECV, NTC.OK, pCln.m_scH, m_rcvS);
            }

            pCln.Recv();
            return;

ERR:
            lock (m_oLock)
            {
                IoEvent(NTC.EV_RECV, err, pCln.m_scH, this);
            }
        }
Example #3
0
        protected void IoRecv(IAsyncResult iar)
        {
            int    hr   = NTC.OK;
            int    io   = NTC.EV_RECV;
            TcpCln pCln = (TcpCln)iar.AsyncState;
            int    rcn  = -1;

            try
            {
                rcn = pCln.m_scH.EndReceive(iar);
            }
            catch (SocketException e0)
            {
                PGLog.LOGW("IoRecv::SocketException::" + e0.ToString());
                hr = NTC.EFAIL_SOCK;
                goto END;
            }
            catch (Exception e1)
            {
                PGLog.LOGW("IoRecv::Exception::" + e1.ToString());
                hr = NTC.EFAIL;
                goto END;
            }

            if (pCln != this)
            {
                PGLog.LOGW("IoRecv::Different object");
                hr = NTC.EFAIL;
                goto END;
            }

            // closed socket
            if (0 >= rcn)
            {
                PGLog.LOGW("IoRecv::force disconnected from server ----------");

                io = NTC.EV_CLOSE;
                goto END;
            }

            PGLog.LOGW("IoRecv::Received size:" + rcn);
            lock (m_oLock) { IoEvnt(NTC.EV_RECV, NTC.OK, pCln.m_scH, rcn, m_rcvS); }

            pCln.Recv();
            return;

END:
            lock (m_oLock) { IoEvnt(io, hr, pCln.m_scH, 0, this); }
            CloseSocket();
        }
Example #4
0
        ////////////////////////////////////////////////////////////////////////
        // Inner Process...
        protected void IoConnect(IAsyncResult iar)
        {
            int    hr   = NTC.OK;
            TcpCln pCln = (TcpCln)iar.AsyncState;

            try
            {
                pCln.m_scH.EndConnect(iar);
            }
            catch (SocketException e0)
            {
                PGLog.LOGW("IoConnect::SocketException::" + e0.ToString());
                hr = NTC.EFAIL_SOCK;
                goto ERR;
            }
            catch (Exception e1)
            {
                PGLog.LOGW("IoConnect::Exception::" + e1.ToString());
                hr = NTC.EFAIL;
                goto ERR;
            }

            if (pCln != this)
            {
                PGLog.LOGW("IoConnect::Different object");
                hr = NTC.EFAIL;
                goto ERR;
            }


            lock (m_oLock)
            {
                PGLog.LOGW("IoConnect::Success");
                IoEvent(NTC.EV_CONNECT, NTC.OK, pCln.m_scH, 0, this);
            }

            pCln.Recv();
            return;

ERR:
            lock (m_oLock)
            {
                IoEvent(NTC.EV_CONNECT, hr, pCln.m_scH, 0, this);
            }
        }