コード例 #1
0
 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();
     }
 }
コード例 #2
0
 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;
         }
     }
 }
コード例 #3
0
ファイル: MonSoc.cs プロジェクト: xvwvx/MirServer-CNet
 private void MonSocket_OnClientDisconnect(object sender, AsyncSockets.AsyncUserToken e)
 {
     ActiveConnections.Remove(e);
 }
コード例 #4
0
        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);
            }
        }