示例#1
0
        private static void EventSink_SocketConnect( SocketConnectEventArgs e )
        {
            try
            {
                IPAddress ip = ( (IPEndPoint) e.Socket.RemoteEndPoint ).Address;

                if ( Firewall.IsBlocked( ip ) )
                {
                    Console.WriteLine( "Client: {0}: Firewall blocked connection attempt.", ip );
                    e.AllowConnection = false;
                    return;
                }
                else if ( IPLimiter.SocketBlock && !IPLimiter.Verify( ip, null ) )
                {
                    Console.WriteLine( "Client: {0}: Past IP limit threshold", ip );

                    using ( StreamWriter op = new StreamWriter( Path.Combine( Environment.Config.LogDirectory, "ipLimits.log" ), true ) )
                        op.WriteLine( "{0}\tPast IP limit threshold\t{1}", ip, DateTime.Now );

                    e.AllowConnection = false;
                    return;
                }
            }
            catch
            {
                e.AllowConnection = false;
            }
        }
示例#2
0
		private static void EventSink_SocketConnect( SocketConnectEventArgs e )
		{
			if ( !e.AllowConnection )
				return;

			if ( !NagleEnabled )
			{
				// RunUO uses its own algorithm
				e.Socket.SetSocketOption( SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1 );
			}
		}
示例#3
0
        private bool VerifySocket(Socket socket)
        {
            try
            {
                var args = new SocketConnectEventArgs(socket);

                EventSink.InvokeSocketConnect(args);

                return(args.AllowConnection);
            }
            catch (Exception ex)
            {
                NetState.TraceException(ex);

                return(false);
            }
        }
示例#4
0
        /// <summary>
        /// 触发Socket的连接事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnSocketConnect(object sender, SocketConnectEventArgs <NetState> e)
        {
            if (WhiteList.IsEnable)
            {
                var ip = e.Session.RemoteOnlyIP;
                if (!WhiteList.Contains(ip))
                {
                    e.AllowConnection = false;
                    return;
                }
            }
            var netState = new NetState(e.Session, this);

            e.Session.Data = netState;

            //  网络连接会涉及到一些业务逻辑操作,因此需要把它加到任务队列里进行处理
            //  如果不考虑业务逻辑的处理,则可以不放到任务队列,节约一下处理时间
            mainTask.AppentdTask(RunTaskNetStateConnect, netState);
        }
 private static void EventSink_SocketConnect(SocketConnectEventArgs e)
 {
     try
     {
         var ip = ((IPEndPoint)e.Socket.RemoteEndPoint).Address;
         if (Firewall.IsBlocked(ip))
         {
             Console.WriteLine($"Client: {ip}: Firewall blocked connection attempt.");
             e.AllowConnection = false;
             return;
         }
         else if (IPLimiter.SocketBlock && !IPLimiter.Verify(ip))
         {
             Console.WriteLine($"Client: {ip}: Past IP limit threshold");
             using (var op = new StreamWriter("ipLimits.log", true))
                 op.WriteLine($"{ip}\tPast IP limit threshold\t{DateTime.UtcNow}");
             e.AllowConnection = false;
             return;
         }
     }
     catch { e.AllowConnection = false; }
 }
示例#6
0
        /// <summary>
        /// 连接新的客户端的处理
        /// </summary>
        /// <param name="NonceClientHandler"></param>
        /// <param name="AllHandlerManager"></param>
        /// <param name="ClientHandlerAtServer"></param>
        private void OnAcceptor(object sender, AcceptorEventArgs eventArgs)
        {
            SocketConnectEventArgs socketConnectEventArgs = new SocketConnectEventArgs(eventArgs.AcceptorHandle);

            GlobalEvent.InvokeSocketConnect(socketConnectEventArgs);

            // 如果允许连接
            if (socketConnectEventArgs.AllowConnection == true)
            {
                ClientSocketManager newClientSocketHandler = new ClientSocketManager(this, eventArgs.AcceptorHandle, m_ReceiveQueuePool.AcquirePoolContent());

                m_LockAccepted.Enter();
                {
                    m_Accepted.Enqueue(newClientSocketHandler);
                }
                m_LockAccepted.Exit();

                LOGs.WriteLine(LogMessageType.MSG_INFO, LanguageString.SingletonInstance.ListenerString003, eventArgs.AcceptorHandle.ClientAddress, eventArgs.AcceptorHandleManager.OnlineClients, eventArgs.AcceptorHandleManager.TotalClients);

                // 有新的连接过来需要发送全局信号处理新的连接
                m_World.SetWorldSignal();
            }
            else // 不允许连接
            {
                try
                {
                    eventArgs.AcceptorHandle.CloseSocket();
                }
                catch
                {
                    Debug.WriteLine("Listener.OnAcceptor(...) - NonceClientHandler.CloseSocket(...) Exception error!");
                }

                LOGs.WriteLine(LogMessageType.MSG_WARNING, LanguageString.SingletonInstance.ListenerString004, eventArgs.AcceptorHandle.ClientAddress, eventArgs.AcceptorHandleManager.OnlineClients, eventArgs.AcceptorHandleManager.TotalClients);
            }
        }
示例#7
0
        private void OnAccept(IAsyncResult asyncResult)
        {
            Socket listener = asyncResult.AsyncState as Socket;

            try
            {
                Socket socket = listener.EndAccept(asyncResult);

                if (socket != null)
                {
                    SocketConnectEventArgs e = new SocketConnectEventArgs(socket);
                    EventSink.InvokeSocketConnect(e);

                    if (e.AllowConnection)
                    {
                        lock (m_AcceptedSyncRoot)
                            m_Accepted.Enqueue(socket);
                    }
                    else
                    {
                        try { socket.Shutdown(SocketShutdown.Both); }
                        catch { }

                        try { socket.Close(); }
                        catch { }
                    }
                }
            }
            catch
            {
            }
            finally
            {
                IAsyncResult res = listener.BeginAccept(m_OnAccept, listener);
            }
        }
示例#8
0
 private static void HandleTCPConnect(SocketConnectEventArgs args)
 {
     Console.WriteLine("Connected To Server");
 }
示例#9
0
 private async Task HandleConnect(SocketConnectEventArgs args)
 {
     await Task.FromResult(true);
 }
示例#10
0
 void OnSocketRecvConnect(object sender, SocketConnectEventArgs<object> e)
 {
     isRecvConnect = true;
 }
示例#11
0
 private void SocketConnectState(object sender, SocketConnectEventArgs e)
 {
     SysConOut.WriteLine("SocketReceived " + e.Error + " ErrorMsg = " + e.ErrorMsg + " ErrorStr = " + e.ErrorStr
                         + " NetSocketType = " + e.NetSocketType.ToString());
 }
示例#12
0
 void m_Socket_SocketConnect(object sender, SocketConnectEventArgs<NetState> e)
 {
     if (e.IsConnected)
         m_Running = true;
 }
示例#13
0
 void OnSocketConnect2(object sender, SocketConnectEventArgs<object> e)
 {
     isConnect2 = true;
     ThreadPool.QueueUserWorkItem(o =>
     {
         //  先延迟500ms再关闭
         Thread.Sleep(500);
         e.Session.CloseSocket();
     });
 }
示例#14
0
		private bool VerifySocket(Socket socket)
		{
			try
			{
				SocketConnectEventArgs args = new SocketConnectEventArgs(socket);

				EventSink.InvokeSocketConnect(args);

				return args.AllowConnection;
			}
			catch (Exception ex)
			{
				NetState.TraceException(ex);

				return false;
			}
		}
示例#15
0
        /// <summary>
        /// 触发Socket的连接事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnSocketConnect(object sender, SocketConnectEventArgs<NetState> e)
        {
            if (WhiteList.IsEnable)
            {
                var ip = e.Session.RemoteOnlyIP;
                if (!WhiteList.Contains(ip))
                {
                    e.AllowConnection = false;
                    return;
                }
            }
            var netState = new NetState(e.Session, this);
            e.Session.Data = netState;

            //  网络连接会涉及到一些业务逻辑操作,因此需要把它加到任务队列里进行处理
            //  如果不考虑业务逻辑的处理,则可以不放到任务队列,节约一下处理时间
            mainTask.AppentdTask(RunTaskNetStateConnect, netState);
        }
示例#16
0
 public void InvokeSocketConnect( SocketConnectEventArgs e )
 {
     if ( SocketConnect != null )
         SocketConnect( e );
 }
示例#17
0
文件: WorldBase.cs 项目: Jimlan/DogSE
        /// <summary>
        /// 触发Socket的连接事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnSocketConnect(object sender, SocketConnectEventArgs<NetState> e)
        {
            var netState = new NetState(e.Session, this);
            e.Session.Data = netState;

            //  网络连接会涉及到一些业务逻辑操作,因此需要把它加到任务队列里进行处理
            //  如果不考虑业务逻辑的处理,则可以不放到任务队列,节约一下处理时间
            taskManager.AppentdTask(RunTaskNetStateConnect, netState);
        }
示例#18
0
        //定义通讯连接通知事件
        private void SocketConnect(object sender, SocketConnectEventArgs e)
        {
            switch ((NetSocketTypes)e.NetSocketType)
            {
            case NetSocketTypes.SOCKET_CONN:
            {
                //判断是否连接成功
                if (e.Error == "Success")
                {
                    //获取用户ID和用户Token
                    string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}:{5}", UserID, UserName, Token, 12344, (int)TCPCmdProtocolVer.VerSign, 1);

                    //连接成功, 立即发送请求登陆的指令
                    _tcpClient.SendData(TCPOutPacket.MakeTCPOutPacket(strcmd, (int)TCPGameServerCmds.CMD_LOGIN_ON));
                }
                else
                {
                    //设置主动断开连接
                    ActiveDisconnect = true;
                    string errMsg = string.Format("连接游戏务器失败");
                    e.ErrorMsg        = errMsg;
                    e.ReturnStartPage = false;
                    e.ShowMsgBox      = false;
                }
                break;
            }

            case NetSocketTypes.SOCKET_SEND:
            {
                //设置主动断开连接
                ActiveDisconnect = true;
                string errMsg = string.Format("与游戏服务器通讯失败");
                e.ErrorMsg        = errMsg;
                e.ReturnStartPage = false;
                e.ShowMsgBox      = true;

                break;
            }

            case NetSocketTypes.SOCKET_RECV:
            {
                break;
            }

            case NetSocketTypes.SOCKET_CLOSE:
            {
                //如果不是主动断开
                if (!ActiveDisconnect)
                {
                    string errMsg = string.Format("亲爱的玩家,你暂时与服务器断开了连接。请放心,我们已经保存了您的数据,请重新登录!");
                    e.ErrorMsg        = errMsg;
                    e.ReturnStartPage = true;
                    e.ShowMsgBox      = true;
                }
                break;
            }

            case NetSocketTypes.SOCKT_CMD:
            {
                SocketCommand(this, e);
                break;
            }

            default:
            {
                //设置主动断开连接
                ActiveDisconnect = true;
                throw new Exception("错误的Socket操作类型");
            }
            }
        }
示例#19
0
        /// <summary>
        /// socket连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void OnSocketConnect(object sender, SocketConnectEventArgs<Session> e)
        {
            //  互相绑定
            var s = new Session();
            s.Client = e.Session;
            e.Session.Data = s;

            nologinSessions.Add(s);
        }
示例#20
0
 void m_server_SocketConnect(object sender, SocketConnectEventArgs <NetData> e)
 {
     e.Session.Data = new NetData();
     m_connectCount++;
 }
示例#21
0
 public static void InvokeSocketConnect(SocketConnectEventArgs e)
 {
     SocketConnect?.Invoke(e);
 }
示例#22
0
		private bool VerifySocket( Socket socket ) {
			try {
				SocketConnectEventArgs args = new SocketConnectEventArgs( socket );

				Events.InvokeSocketConnect( args );

				return args.AllowConnection;
			} catch( Exception ex ) {
				ExceptionHandler.Trace( ex );

				return false;
			}
		}
示例#23
0
 void OnSocketRecvConnect(object sender, SocketConnectEventArgs <object> e)
 {
     isRecvConnect = true;
 }
示例#24
0
文件: FrmMain.cs 项目: zaq1xsw/DogSE
 void m_server_SocketConnect(object sender, SocketConnectEventArgs<NetData> e)
 {
     e.Session.Data = new NetData();
     m_connectCount++;
 }