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; } }
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 ); } }
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); } }
/// <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; } }
/// <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); } }
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); } }
private static void HandleTCPConnect(SocketConnectEventArgs args) { Console.WriteLine("Connected To Server"); }
private async Task HandleConnect(SocketConnectEventArgs args) { await Task.FromResult(true); }
void OnSocketRecvConnect(object sender, SocketConnectEventArgs<object> e) { isRecvConnect = true; }
private void SocketConnectState(object sender, SocketConnectEventArgs e) { SysConOut.WriteLine("SocketReceived " + e.Error + " ErrorMsg = " + e.ErrorMsg + " ErrorStr = " + e.ErrorStr + " NetSocketType = " + e.NetSocketType.ToString()); }
void m_Socket_SocketConnect(object sender, SocketConnectEventArgs<NetState> e) { if (e.IsConnected) m_Running = true; }
void OnSocketConnect2(object sender, SocketConnectEventArgs<object> e) { isConnect2 = true; ThreadPool.QueueUserWorkItem(o => { // 先延迟500ms再关闭 Thread.Sleep(500); e.Session.CloseSocket(); }); }
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; } }
/// <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); }
public void InvokeSocketConnect( SocketConnectEventArgs e ) { if ( SocketConnect != null ) SocketConnect( e ); }
/// <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); }
//定义通讯连接通知事件 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操作类型"); } } }
/// <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); }
void m_server_SocketConnect(object sender, SocketConnectEventArgs <NetData> e) { e.Session.Data = new NetData(); m_connectCount++; }
public static void InvokeSocketConnect(SocketConnectEventArgs e) { SocketConnect?.Invoke(e); }
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; } }
void OnSocketRecvConnect(object sender, SocketConnectEventArgs <object> e) { isRecvConnect = true; }
void m_server_SocketConnect(object sender, SocketConnectEventArgs<NetData> e) { e.Session.Data = new NetData(); m_connectCount++; }