public void InitNet(string ip, UInt16 ServerPort) { bClosed = false; this.port = ServerPort; this.ip = ip; m_state = NETSTATE.DISCONNECTED; mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); EndPoint bindEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); mSocket.Bind(bindEndPoint); //mEndPointPool = new SafeObjectPool<IPEndPoint> (100); mSendPackageQueue = new ConcurrentQueue <NetEndPointPackage> (); mReceivePackageQueue = new ConcurrentQueue <NetEndPointPackage> (); mHandleReceiveDataThread = new Thread(HandleReceiveData); mHandleReceiveDataThread.IsBackground = false; mHandleReceiveDataThread.Start(); mReceiveThread = new Thread(ReceiveThreadUpdate); mReceiveThread.IsBackground = false; mReceiveThread.Start(); mSendThread = new Thread(SendThreadUpdate); mSendThread.IsBackground = false; mSendThread.Start(); mSocket.SendBufferSize = 1024 * 1024 * 2; mSocket.ReceiveBufferSize = 1024 * 1024 * 2; DebugSystem.Log("Server ReceiveBufferSize: " + mSocket.ReceiveBufferSize); DebugSystem.Log("Server SendBufferSize: " + mSocket.SendBufferSize); }
public void InitNet(string ip, UInt16 ServerPort) { bClosed = false; this.port = ServerPort; this.ip = ip; m_state = NETSTATE.DISCONNECTED; mUdpType = UDPTYPE.POINTTOPOINT; mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); remoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port); mSocket.SendBufferSize = 1024 * 1024; mSocket.ReceiveBufferSize = 1024 * 1024; mSocket.Connect(remoteEndPoint); mSendPackageQueue = new ConcurrentQueue <NetPackage> (); mReceivePackageQueue = new ConcurrentQueue <NetUdpFixedSizePackage> (); mReceiveThread = new Thread(ReceiveThreadUpdate); mReceiveThread.IsBackground = true; mReceiveThread.Start(); mHandleDataThread = new Thread(HandleReceiveData); mHandleDataThread.IsBackground = true; mHandleDataThread.Start(); mSendThread = new Thread(SendThreadUpdate); mSendThread.IsBackground = true; mSendThread.Start(); }
void ConnectFail() { Log.Debug("ConnectFail"); if (netState == NETSTATE.Connecting) { netState = NETSTATE.ConnectFailed; RemoveConnectTimer(); if (--_retryTimes > 0) { CloseTcpClient(); BeginRetryTimer(); } else { CloseConnect(); netConnectionCallback.Call(NETEVENT.RetryFail); } } else { Log.Debug("ConnnectFail ignore, netState = " + netState.ToString()); } }
private void CloseConnect() { netState = NETSTATE.DisConnected; Log.Debug("Close connect"); lock (m_BufferToSend) { m_BufferToSend.Clear(); } m_HeartBeatTimeCount = 0; m_HelloHasResponse = false; TimeoutManager.instance.ClearTimeout(m_SendHelloTimerId); SetTerminated(); if (m_TcpClient == null) { return; } CloseTcpClient(); netConnectionCallback.Call(NETEVENT.Close); }
private void ReceiveThreadUpdate() { while (true) { int length = 0; try { EndPoint tempEndPoint = new IPEndPoint(IPAddress.Broadcast, 0); NetUdpFixedSizePackage mPackage = ObjectPoolManager.Instance.mUdpFixedSizePackagePool.Pop(); length = mSocket.ReceiveFrom(mPackage.buffer, ref tempEndPoint); mPackage.Length = length; if (length > 0) { NetEndPointPackage mEndPointPackage = ObjectPoolManager.Instance.mNetEndPointPackagePool.Pop(); mEndPointPackage.mPackage = mPackage; mEndPointPackage.mRemoteEndPoint = tempEndPoint; mReceivePackageQueue.Enqueue(mEndPointPackage); } else { ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mPackage); DebugSystem.LogError("接受长度: " + length); break; } } catch (SocketException e) { if (e.SocketErrorCode == SocketError.Interrupted) { DebugSystem.LogWarning("阻塞Socket 调用已被取消"); } else { DebugSystem.LogWarning("SocketException: " + e.SocketErrorCode); } break; } catch (Exception e) { DebugSystem.LogError("服务器 异常: " + e.Message + " | " + e.StackTrace); m_state = NETSTATE.DISCONNECTED; peer_event mEvent = new peer_event(); mEvent.mNetEventType = NETEVENT.DISCONNECTED; mEvent.msg = e.Message; break; } } DebugSystem.LogWarning("Server ReceiveThread Safe Quit !"); }
void StartConnecting() { if (netState == NETSTATE.ConnectFailed || netState == NETSTATE.DisConnected) { netState = NETSTATE.Connecting; netConnectionCallback.Call(NETEVENT.Connecting); BeginConnectTimer(); StartConnectThread(); } else { Log.Debug("StartConnecting ignore, netState = " + netState.ToString()); } }
void StartConnecting() { if (NetState == NETSTATE.ConnectFailed || NetState == NETSTATE.DisConnected) { NetState = NETSTATE.Connecting; if (netConnectionCallback != null) { netConnectionCallback(NETEVENT.Connecting); } BeginConnectTimer(); StartConnectThread(); } else { FLog.Debug("StartConnecting ignore, NetState=" + NetState.ToString()); } }
private void ReceiveThreadUpdate() { while (!bClosed) { int length = 0; try { NetUdpFixedSizePackage mReceiveStream = ObjectPoolManager.Instance.mUdpFixedSizePackagePool.Pop(); length = mSocket.ReceiveFrom(mReceiveStream.buffer, 0, mReceiveStream.buffer.Length, SocketFlags.None, ref remoteEndPoint); if (length > 0) { mReceiveStream.Length = length; mReceivePackageQueue.Enqueue(mReceiveStream); } else { DebugSystem.Log("Client ReceiveLength: " + length); ObjectPoolManager.Instance.mUdpFixedSizePackagePool.recycle(mReceiveStream); } } catch (SocketException e) { if (e.SocketErrorCode == SocketError.Shutdown) { DebugSystem.LogWarning("Socket 接受操作被禁止"); } else { DebugSystem.LogWarning("ScoketException: " + e.SocketErrorCode); } break; } catch (Exception e) { DebugSystem.LogError(e.Message); m_state = NETSTATE.DISCONNECTED; peer_event mEvent = new peer_event(); mEvent.mNetEventType = NETEVENT.DISCONNECTED; mEvent.msg = e.Message; break; } } DebugSystem.LogWarning("Client ReceiveThread Safe Quit !"); }
void ConnectOK() { Log.Debug("ConnectOK"); if (netState == NETSTATE.Connecting) { netState = NETSTATE.Connected; RemoveConnectTimer(); StartSendThread(); StartReceiveThread(); EnableRetry(true); netConnectionCallback.Call(NETEVENT.Success); } else { Log.Debug("ConnectOK ignore, netState = " + netState.ToString()); } }
void CloseConnect() { NetState = NETSTATE.DisConnected; FLog.Debug("CloseConnect"); lock (_bufToSend) { _bufToSend.Clear(); } SetTerminateFlag(); if (_tcpClient == null) { return; } CloseTcpClient(); if (netConnectionCallback != null) { netConnectionCallback(NETEVENT.Close); } }
public void AcceptClient(Socket mSocket, EndPoint remoteEndPoint) { this.m_state = NETSTATE.DISCONNECTED; this.remoteEndPoint = remoteEndPoint; }