private static void OnIncomingRPCCommand_RefreshGroups(byte[] payload) { //Read header byte filterType = payload[2]; byte reserved = payload[3]; ushort filterSize = BitConverter.ToUInt16(payload, 4); //Read filter ISockFilter filter = DecodeCommandFilter(payload, filterType, (byte)filterSize, 6, out ObjectId? serverId); //Handle DispatchMessage(filter, new RefreshGroupsRequestCommand()); }
private static void OnIncomingRPCCommand_RPCMessage(byte[] payload) { //Read header RPCOpcode opcode = (RPCOpcode)BitConverter.ToInt32(payload, 2); byte filterType = payload[6]; byte reserved = payload[7]; ushort filterSize = BitConverter.ToUInt16(payload, 8); uint payloadSize = BitConverter.ToUInt32(payload, 10 + filterSize); //Read filter ISockFilter filter = DecodeCommandFilter(payload, filterType, (byte)filterSize, 10, out ObjectId? serverId); //Read payload JObject data = JsonConvert.DeserializeObject <JObject>(Encoding.UTF8.GetString(payload, 10 + filterSize + 4, (int)payloadSize)); //Handle DispatchMessage(filter, new SendRPCMessageCommand(opcode.ToString(), serverId, data)); }
private static void DispatchMessage(ISockFilter filter, ISockCommand cmd) { //Clone list List <RPCConnection> clientsSafe = new List <RPCConnection>(); lock (connections) clientsSafe.AddRange(connections); //Search foreach (var c in clientsSafe) { //Filter if (!filter.CheckFilter(c)) { continue; } //Send c.EnqueueMessage(cmd); } }