public void Broadcast(ClientSocket srcSock) { Parallel.ForEach <ClientSocket>(portMap[srcSock].Clients, (dstSock, loopState) => { if (dstSock.SocketID == srcSock.SocketID) { loopState.Break(); } int mProcessId = GetProcessId(dstSock); if (mProcessId == -1) { loopState.Break(); } System.Net.Sockets.SocketInformation mInfomation = srcSock.cSocket.DuplicateAndClose(mProcessId); ExchangeObject mObject = new ExchangeObject { PackType = (int)Common.ECommand.SocketInfo, SerialNumber = 0, mData = Common.SerializeSocketInfo(mInfomation) }; mObject.PackLength = 12 + mObject.mData.Length; byte[] mBytes = mObject.ToBuffer(); server.SendData(dstSock.SocketID, mBytes); }); Logs.Create("根据映射配置,将" + srcSock.sRemoteIPAndPort.Replace(":", "_") + "的数据群发Broadcast到:" + portMap[srcSock].Clients.Count + "个客户端"); }
public static System.Net.Sockets.SocketInformation DeserializeSocketInfo(byte[] mBytes) { using (MemoryStream ms = new MemoryStream(mBytes)) { BinaryFormatter mFormatter = new BinaryFormatter(); System.Net.Sockets.SocketInformation mInfo = (System.Net.Sockets.SocketInformation)mFormatter.Deserialize(ms); return(mInfo); } }
public void TransferConnection(System.Net.Sockets.SocketInformation socketInfo, String cacheId, byte[] transferCommand) { ManagementCommand command = GetManagementCommand(ManagementUtil.MethodName.TransferConnection); command.Parameters.AddParameter(socketInfo); command.Parameters.AddParameter(cacheId); command.Parameters.AddParameter(transferCommand); ExecuteCommandOnCacehServer(command); }
public static byte[] SerializeSocketInfo(System.Net.Sockets.SocketInformation mInfo) { using (MemoryStream ms = new MemoryStream()) { BinaryFormatter mFormatter = new BinaryFormatter(); mFormatter.Serialize(ms, mInfo); ms.Position = 0; byte[] mBytes = new byte[ms.Length]; ms.Read(mBytes, 0, mBytes.Length); return(mBytes); } }
public void ExchangeTransfer(ClientSocket srcSock, ClientSocket dstSock) { if (dstSock.SocketID == srcSock.SocketID) { return; } int mProcessId = GetProcessId(dstSock); if (mProcessId == -1) { return; } System.Net.Sockets.SocketInformation mInfomation = srcSock.cSocket.DuplicateAndClose(mProcessId); ExchangeObject mObject = new ExchangeObject { PackType = (int)Common.ECommand.SocketInfo, SerialNumber = 0, mData = Common.SerializeSocketInfo(mInfomation) }; mObject.PackLength = 12 + mObject.mData.Length; byte[] mBytes = mObject.ToBuffer(); server.SendData(dstSock.SocketID, mBytes); //Thread.Sleep(100); //ExchangeObject mObject2 = new ExchangeObject(); //byte[] mBytes2 = mObject2.ToBuffer<Data>(new Data //{ // DataGuid = Guid.NewGuid(), // Buffer = null //}, Common.ECommand.Data); //byte[] mBytes2 = mObject2.ToBuffer<int>(mProcessId, Common.ECommand.Login); //server.SendData(dstSock.SocketID, mBytes2); Logs.Create("根据映射配置,将" + srcSock.sRemoteIPAndPort.Replace(":", "_") + "的数据转发ExchangeTransfer到:" + dstSock.sRemoteIPAndPort); }
public override void TransferConnection(System.Net.Sockets.SocketInformation socketInfo, String cacheId, byte[] transferCommand) { ConnectionManager.OnClientConnected(socketInfo, transferCommand); }
public Socket(System.Net.Sockets.SocketInformation socketInformation) { }