Ejemplo n.º 1
0
        static void DecodeSharedObject(SharedObjectMessage so, ByteBuffer stream, RtmpReader reader)
        {
            // Parse request body
            while (stream.HasRemaining)
            {
                byte typeCode = reader.ReadByte();
                SharedObjectEventType type = SharedObjectTypeMapping.ToType(typeCode);
                string key   = null;
                object value = null;

                int length = stream.GetInt();                //reader.ReadInt32();
                switch (type)
                {
                case SharedObjectEventType.CLIENT_STATUS:
                    // Status code
                    key = reader.ReadString();
                    // Status level
                    value = reader.ReadString();
                    break;

                case SharedObjectEventType.CLIENT_UPDATE_DATA: {
                    key   = reader.ReadString();
                    value = reader.ReadData();

                    /*
                     * key = null;
                     * // Map containing new attribute values
                     * Hashtable map = new Hashtable();
                     * int start = (int)stream.Position;
                     * while((int)stream.Position - start < length)
                     * {
                     *      string tmp = reader.ReadString();
                     *      map[tmp] = reader.ReadData();
                     * }
                     * value = map;
                     */
                }
                break;

                default:
                    if (type != SharedObjectEventType.SERVER_SEND_MESSAGE && type != SharedObjectEventType.CLIENT_SEND_MESSAGE)
                    {
                        if (length > 0)
                        {
                            key = reader.ReadString();
                            if (length > key.Length + 2)
                            {
                                value = reader.ReadData();
                            }
                        }
                    }
                    else
                    {
                        int start = (int)stream.Position;
                        // the "send" event seems to encode the handler name
                        // as complete AMF string including the string type byte
                        key = reader.ReadData() as string;
                        // read parameters
#if !(NET_1_1)
                        List <object> paramList = new List <object>();
#else
                        ArrayList paramList = new ArrayList();
#endif
                        while (stream.Position - start < length)
                        {
                            object tmp = reader.ReadData();
                            paramList.Add(tmp);
                        }
                        value = paramList;
                    }
                    break;
                }
                so.AddEvent(type, key, value);
            }
        }
Ejemplo n.º 2
0
		static void DecodeSharedObject(SharedObjectMessage so, ByteBuffer stream, RtmpReader reader) {
			// Parse request body
			while (stream.HasRemaining) {
				byte typeCode = reader.ReadByte();
				SharedObjectEventType type = SharedObjectTypeMapping.ToType(typeCode);
				string key = null;
				object value = null;

				int length = stream.GetInt();//reader.ReadInt32();
				switch (type) {
					case SharedObjectEventType.CLIENT_STATUS:
						// Status code
						key = reader.ReadString();
						// Status level
						value = reader.ReadString();
						break;
					case SharedObjectEventType.CLIENT_UPDATE_DATA: {
							key = reader.ReadString();
							value = reader.ReadData();
							/*
							key = null;
							// Map containing new attribute values
							Hashtable map = new Hashtable();
							int start = (int)stream.Position;
							while((int)stream.Position - start < length) 
							{
								string tmp = reader.ReadString();
								map[tmp] = reader.ReadData();
							}
							value = map;
							*/
						}
						break;
					default:
						if (type != SharedObjectEventType.SERVER_SEND_MESSAGE && type != SharedObjectEventType.CLIENT_SEND_MESSAGE) {
							if (length > 0) {
								key = reader.ReadString();
								if (length > key.Length + 2) {
									value = reader.ReadData();
								}
							}
						} else {
							int start = (int)stream.Position;
							// the "send" event seems to encode the handler name
							// as complete AMF string including the string type byte
							key = reader.ReadData() as string;
							// read parameters
#if !(NET_1_1)
							List<object> paramList = new List<object>();
#else
							ArrayList paramList = new ArrayList();
#endif
							while (stream.Position - start < length) {
								object tmp = reader.ReadData();
								paramList.Add(tmp);
							}
							value = paramList;
						}
						break;
				}
				so.AddEvent(type, key, value);
			}
		}