Protocol Zero / 0.9 (DRAFT)

MessageModel {
  string ID { get; }
  PersonModel Origin { get; }
  DateTime TimeStamp { get; }
  List<MessagePartModel> Parts { get; }
}

// for nicknames, then the view doesn't have to parse the messages anymore
PersonMessagePartModel {
}
ImageMessagePartModel {
}
UrlMessagePartModel {
}
TextMessagePartModel {
}

IChatRPC {
  void Add(ChatModel);
  void Update(ChatModel, ChatInfoModel);
  void Remove(ChatModel);
}

ChatInfoModel {
  string Title { get; set; }
  EChatState State { get; set; }
}

enum EChatState {
  Inactive,  // the contact closed your window
  Composing, // is typing right now
  Active,    // in the contact's chat client, your chat window is the active tab and the window is on top
  Gone,      // the contact has not been active in your chat window for some time
  Paused     // the contact was typing, but isn't anymore
}

IMessageRPC {
  void Add(MessageModel, ChatModel);
}

IContactRPC {
  // ChatModel and not GroupChatModel, as a contactlist is no groupchat
  void Add(PersonModel, ChatModel);
  void Remove(PersonModel, ChatModel);
  // if id of PersonModel already exists, update it with new personmodel, if not -> ?
  void Update(PersonModel, ChatModel);
}

PersonModel
{
  string ID { get; }
  string NickName { get; set; }
  EPresence Presence { get; set; }
  string StatusMessage { get; set; }
  // this would be always none for irc, but xmpp, jabbr and twitter can make use of it
  ESubscription Subscription { get; set; }
}

enum EPresence
{
  Offline,
  Available,
  Away,
  DoNotDisturb,
  FreeForChat,
  ExtendedAway
}

enum ESubscription
{
  None,
  Both,
  To,
  From,
  ToAndRequesting,
  FromAndRequesting
}

IPresenceRPC {
  UpdateStatus(string message);
  Update(EPresence);
  Update(EPresence, string message);
}

IFileTransferRPC {
}

Apps/Smuxi/Protocol/Zero (last edited 2013-11-27 19:44:55 by WilliamJonMcCann)