internal void FireOnSkypeMessage(SktSkype sender, OnSkypeMessageArgs e) { if (OnSkypeMessage == null) return; // No event assigned if (gui == null) { FireCallbackInSeparateThread(e, OnSkypeMessageInNewThread); return; } gui.BeginInvoke(OnSkypeMessage, new object[] { sender, e }); // Synchronizing to gui thread }
internal void ProcessOnSkypeMessage(SktSkype sender) { if (skypeRef.logging) skypeRef.Log("Processing event OnSkypeMessage"); OnSkypeMessageArgs args = new OnSkypeMessageArgs(); int marker = 0; int typeTag = 0; do { typeTag = skypeRef.transport.ReadByte(); if (typeTag == 122) break; marker = skypeRef.transport.ReadByte(); switch (marker) { case 1: args.message = (SktMessage)skypeRef.decoder.DecodeObject(9); // SktMessage class ID = 9 break; case 2: args.changesInboxTimestamp = (typeTag == 'T'); break; case 3: args.supersedesHistoryMessage = (SktMessage)skypeRef.decoder.DecodeObject(9); // SktMessage class ID = 9 break; case 4: args.conversation = (SktConversation)skypeRef.decoder.DecodeObject(18); // SktConversation class ID = 18 break; default: if (marker != 122) skypeRef.Error(String.Format("Invalid event argument tag {0} in OnSkypeMessage", marker)); break; } } while (marker != 'z'); skypeRef.transport.ResumeSocketReaderFromEvent(); args.senderobj = sender; FireOnSkypeMessage(sender, args); }