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); }
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); } }
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(); }
//////////////////////////////////////////////////////////////////////// // 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); } }