Channels ▼

Avo Reid

Dr. Dobb's Bloggers

Cocomo Vitamins for RIAs

November 21, 2008

Are you writing a Rich Internet Application (RIA) for a mobile device using Flex and need to get some Web 2.0 muscle into your application?  Cocomo from Adobe may be for you. Even if you are not you should read on to understand the power of Software as a Service . 

The easiest way to see the features of Cocomo is to goto the Adobe ConnectNow Beta Site. create an account and login or read the marketing material about the Adobe ConnectNow Beta. ConectNow is Adobes entry into the web collaboration arena.  Using ConnectNow users can create a unique room URl and meet live over the web and to share screens, files, whiteboards, audio and video conference, chat, and even control each others desktop with permission.  The ConnectNow Platform of services is what makes Cocomo possible, so much of what you see in ConnectNow is accessible through the Cocomo Platform as a Service and the Cocomo SDK.

Cocomo is in Beta (0.9) release and is available now for developers to download and kick the tires.  Cocomo is actually a codename for an Adobe project and stands for "Common Collaborative Model". The goal is to allow developers to quickly build or add multi-user, real-time collaborative (RTC) features to their applications by providing a set of easy to understand components, tools and services  delivered through a Platform as a Service. Cocomo is provides both Flex-based client components and a hosted services infrastructure at, so issues like deployment, maintenance and scalability are taken care of for you.

Cocomo enables developers to add Web 2.0 style social features to existing Flex apps or to build completely new ones  such as real-time productivity/collaboration apps, multiplayer games, and audio/video chat.  

Features in the current Cocomo beta include: 

  •  VoIP Audio
  • Real-Time File Sharing
  • Webcam Video
  • User Management
  • Chat
  • Roles ad Permissions
  • Multi-User Whiteboards
  • Robust Data Messaging 

If you are a Flex developer and would like to kick the tires on the Cocomo Platform as a Service and the Cocomo SDK do the following: 

  1.  Visit the Adobe Cocomo Developer Portal and login with your Adobe ID, if you don't have an Adobe ID just click on New Dev sign up, its free.

  2. After successfully logging in you will see a Create Cocomo Developer Account dialog with some pretty standard data to fill in to login to your Cocomo account.  The Account Name is worth mentioning, this is a unique name to the ConnectNow namespace and will be appended to the Cocomo root url ( which together creates your Cocomo Account URL. For example my Account URL is

  3. Once you have logged in successfully you will see the Cocomo Developers Portal.  Here things are partitioned into pods. 

    First your Account Information pod contains  your Account URL described above, and a  Secret Key which you will use to authenticate users to your Cocomo collaboration space enabling you to continue to use whatever authentication your application or company uses on the client end. You can generate these Secret Keys at will, so use one for testing and generate a new one for deployment.

    You will also see a Room pod which will contain a list of Rooms you have setup in your account. Rooms are really the Cocomo collaboration spaces you setup in your account.  Think of a Room as a virtual location or meeting place at which you will use in your application to allow your users to collaborate and socialize using the services provided by Cocomo.

    Each room referenced by a URL which consists of your Account URL appended with your Room name. For example I created a Room named myroom, so the Room URL I use in my applications is You can create rooms programmatically but you can also create them using the Developer Portal. You should go ahead and create one if you are going to use the example applications that come with the Cocomo SDK.

    Next to the Account information will be Templates.  Templates are predefined Rooms which contain pods like Chat and Whiteboard. When you create a room you will add one or more pods to configure the room, so templates allow you to predefine a type of Room and then create Rooms from templates.  

  4. At the bottom of the Cocomo Developer Portal are some statistic pods which show Bandwidth, Message Count and Connection Time for your Account.

  5. After you familiarize yourself with the Cocomo Developers Portal and create your first Room check out the examples in the SDK.

  6. Tip: Make sure your reference the appropriate cocomo.swc in the lib/player9 or lib/player10 folder to resolve the Cocomo namespace.
Examples included in the Cocomo SDK:
  • Audio: Uses an audio publisher and subscriber and shows to change various audio settings such as gain, silenceLevel, echoSuppression, and so on via AudioPublisher properties. All users other than the person running the demo can hear the published audio.
  • ComplexObjectTransfer: Demonstrates the use of the registerBodyClass method in MessageItem for passing items containing complex objects over the Cocomo service.
  • CustomRoster: Demonstrates how to use UserManager and UserRoles to promote, demote, and remove people by calling various UserManager API's and listening to its events to make user interface changes.
  • DefaultPods: A simple first application demonstrating the use of the default pods as well as basic authentication and session creation.
  • ExternalAuthentication:
  • FilePublisher: Shows how to upload, download, delete, and display files via Cocomo's API FileManager, FilePublisher, and FileSubscriber components.
  • KnockingQueue: Demonstrates the use of a knocking queue. When a user or users arrive at a room whose state is knocking (guestsHaveToKnock = true in RoomManager), and the host is there, the users are placed in a pending queue. The host sees the pending, accepted, denied queue and a chat window. Once a user is accepted, they see a chat; if they are not accepted, they see a blank screen.
  • LocalConnection: A simple white board application that shows how to connect to the local server tool included in the extras directory. LocalConnectionServer.air allows offline development and testing of non-streaming components.
  • LoginDialog: A user interface showing login mechanism that allows you to log in as a member or guest.
  • Multiple Groups: Demonstrates how to use multiple pod groups such as camera, chat, and note within a room. Grouping is useful for building applications that support private chats, private groups, etc. and where users can be divided into groups each of which see a different user interface.
  • Shared Collection: Shows how to use a SharedCollection model for having synchronized lists and datagrids. In this case, we are using a synchronized datagrid to add, remove, edit items, and any newly arrived user can see the updated list.
  • SharedModel: A better user interface showing several pod types as well as a standard log in mechanism.
  • SimpleChat: Shows how this shared model can be made easily bindable for MXML.
  • WebCamera: Demonstrates how the camera component can be used with a publisher and a number of subscribers. The publisher has a big view while subscribers have a small view. A shared property is used to pass the stream to the publisher's user interface. Every user is provided with play and pause handlers.
  • YahooMaps: A working application using ActionScript 3 components that leverages Yahoo Maps.
  • Related Reading

    More Insights

    Currently we allow the following HTML tags in comments:

    Single tags

    These tags can be used alone and don't need an ending tag.

    <br> Defines a single line break

    <hr> Defines a horizontal line

    Matching tags

    These require an ending tag - e.g. <i>italic text</i>

    <a> Defines an anchor

    <b> Defines bold text

    <big> Defines big text

    <blockquote> Defines a long quotation

    <caption> Defines a table caption

    <cite> Defines a citation

    <code> Defines computer code text

    <em> Defines emphasized text

    <fieldset> Defines a border around elements in a form

    <h1> This is heading 1

    <h2> This is heading 2

    <h3> This is heading 3

    <h4> This is heading 4

    <h5> This is heading 5

    <h6> This is heading 6

    <i> Defines italic text

    <p> Defines a paragraph

    <pre> Defines preformatted text

    <q> Defines a short quotation

    <samp> Defines sample computer code text

    <small> Defines small text

    <span> Defines a section in a document

    <s> Defines strikethrough text

    <strike> Defines strikethrough text

    <strong> Defines strong text

    <sub> Defines subscripted text

    <sup> Defines superscripted text

    <u> Defines underlined text

    Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

    Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.