Beispiel #1
0
        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());
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
            }
        }