private void MSocket_OnClientConnect(object sender, AsyncSockets.AsyncUserToken e) { int I; string sRemoteAddr; bool boAllowed; TMsgServerInfo MsgServer; if (TFrmMain.Colsed) return; sRemoteAddr = e.EndPoint.Address.ToString();// Socket.RemoteAddress; boAllowed = false; for (I = LSShare.ServerAddr.GetLowerBound(0); I <= LSShare.ServerAddr.GetUpperBound(0); I++) { if (sRemoteAddr == LSShare.ServerAddr[I]) { boAllowed = true; break; } } if (boAllowed) { MsgServer = new TMsgServerInfo(); MsgServer.sServerName = ""; MsgServer.sReceiveMsg = ""; MsgServer.Socket = e; MsgServer.sIPaddr = e.EndPoint.Address.ToString() + ":" + e.EndPoint.Port; m_ServerList.Add(MsgServer); } else { LSShare.MainOutMessage("非法地址连接:" + sRemoteAddr); e.Socket.Close(); } }
private void MSocket_OnClientDisconnect(object sender, AsyncSockets.AsyncUserToken e) { int I; TMsgServerInfo MsgServer; for (I = 0; I < m_ServerList.Count; I++) { MsgServer = m_ServerList[I]; if (MsgServer.Socket == e) { Dispose(m_ServerList[I]); m_ServerList.RemoveAt(I); break; } } }
private void MonSocket_OnClientDisconnect(object sender, AsyncSockets.AsyncUserToken e) { ActiveConnections.Remove(e); }
private void MSocket_OnClientRead(object sender, AsyncSockets.AsyncUserToken e) { int I; TMsgServerInfo MsgServer; string sReviceMsg = string.Empty; string sMsg = string.Empty; string sCode = string.Empty; string sAccount = string.Empty; string sServerName = string.Empty; string sIndex = string.Empty; string sOnlineCount = string.Empty; int nCode; TConfig Config; Config = LSShare.g_Config; if (TFrmMain.Colsed) return; HUtil32.EnterCriticalSection(objRead); try { for (I = 0; I < m_ServerList.Count; I++) { MsgServer = m_ServerList[I]; if (MsgServer.Socket == e) { //string ReceiveText = Encoding.Default.GetString(e.ReceiveBuffer, 0, e.BytesReceived); //if (ReceiveText[0] == '\0') ReceiveText = ""; byte[] data = new byte[e.BytesReceived]; Array.Copy(e.ReceiveBuffer, e.Offset, data, 0, e.BytesReceived); string ReceiveText = Encoding.Default.GetString(data); sReviceMsg = MsgServer.sReceiveMsg + ReceiveText; while ((sReviceMsg.IndexOf(')') > 0)) { sReviceMsg = HUtil32.ArrestStringEx(sReviceMsg, "(", ")", ref sMsg); if (sMsg == "") { break; } sMsg = HUtil32.GetValidStr3(sMsg, ref sCode, new string[] { "/" }); nCode = HUtil32.Str_ToInt(sCode, -1); switch (nCode) { case Common.SS_SOFTOUTSESSION: sMsg = HUtil32.GetValidStr3(sMsg, ref sAccount, new string[] { "/" }); FrmMain.CloseUser(Config, sAccount, HUtil32.Str_ToInt(sMsg, 0)); break; case Common.SS_SERVERINFO: sMsg = HUtil32.GetValidStr3(sMsg, ref sServerName, new string[] { "/" }); sMsg = HUtil32.GetValidStr3(sMsg, ref sIndex, new string[] { "/" }); sMsg = HUtil32.GetValidStr3(sMsg, ref sOnlineCount, new string[] { "/" }); MsgServer.sServerName = sServerName; MsgServer.nServerIndex = HUtil32.Str_ToInt(sIndex, 0); MsgServer.nOnlineCount = HUtil32.Str_ToInt(sOnlineCount, 0); MsgServer.dwKeepAliveTick = HUtil32.GetTickCount(); MsgServer.sIPaddr = e.EndPoint.Address.ToString() + ":" + e.EndPoint.Port.ToString(); SortServerList(I); LSShare.nOnlineCountMin = GetOnlineHumCount(); if (LSShare.nOnlineCountMin > LSShare.nOnlineCountMax) { LSShare.nOnlineCountMax = LSShare.nOnlineCountMin; } SendServerMsgA(Common.SS_KEEPALIVE, (LSShare.nOnlineCountMin).ToString()); RefServerLimit(sServerName); break; case Common.UNKNOWMSG: SendServerMsgA(Common.UNKNOWMSG, sMsg); break; case Common.SS_ADDIPTOGATE: FrmMain.SendIPToGate(sMsg); break; } } } MsgServer.sReceiveMsg = sReviceMsg; //MessageBox.Show(m_ServerList[I].sReceiveMsg); //m_ServerList[I] = MsgServer; } } finally { HUtil32.LeaveCriticalSection(objRead); } }