//按组发送 public static void SocketSendByGroup(int groupId, Package pkg) { m_tryToRemoveSocketIdBuffer.Clear(); foreach (int key in socketPool.Keys) { try { BaseSocket s = socketPool[key]; //组Id匹配 if (groupId == s.GetGroupId()) { var sendBytes = PackageHelper.GetNetworkSendBuffer(pkg);; if (s.SocketSend(sendBytes, 0, sendBytes.Length) != SOCKET_CODE.SUCCESS) { m_tryToRemoveSocketIdBuffer.Add(key); } } } catch { m_tryToRemoveSocketIdBuffer.Add(key); } } foreach (int id in m_tryToRemoveSocketIdBuffer) { socketPool[id].SocketClose(); socketPool.Remove(id); } m_tryToRemoveSocketIdBuffer.Clear(); }
//主动发送 public static bool SocketSend(int id, Package pkg) { if (socketPool.ContainsKey(id)) { try { BaseSocket s = socketPool[id]; if (s.GetSocketId() != IpManager.ListenSocketId) { var sendBytes = PackageHelper.GetNetworkSendBuffer(pkg); if (s.SocketSend(sendBytes, 0, sendBytes.Length) != SOCKET_CODE.SUCCESS) { socketPool[id].SocketClose(); socketPool.Remove(id); } return(true); } } catch { socketPool[id].SocketClose(); socketPool.Remove(id); } } return(false); }
public static bool RequestService(SocketInfoType socketInfoType, Package pkg) { int type = (int)socketInfoType; //if (ConnectToService(socketInfoType) == SERVICE_CODE.SUCCESS) //注掉这行代码 意味着用户需要显式连接后再发送 { if (connectorMap.ContainsKey(type)) { BaseSocket s = connectorMap[type]; var sendBuff = PackageHelper.GetNetworkSendBuffer(pkg); if (s.SocketSend(sendBuff, 0, sendBuff.Length) == SOCKET_CODE.SUCCESS) { return true; } else { connectorMap.Remove(type); return false; } } } return false; }