/// <summary> /// Process one inbound Chunk, returning a list of equivalent ArchiveRtNav objects, or null. /// </summary> /// <param name="rtobj"></param> /// <returns></returns> public List <object> Accept(object rtobj) { List <object> rtObjects = new List <object>(); if (rtobj is CP3.Network.Chunking.Chunk) { CP3.Network.Chunking.Chunk chunk = (CP3.Network.Chunking.Chunk)rtobj; Debug.WriteLine("Receiving chunk: " + chunk.FrameSequence.ToString()); object message = m_ChunkAssembler.Assemble(chunk); if (message is IEnumerable <object> ) { foreach (CP3.Network.Messages.Message m in ((IEnumerable <object>)message)) { //Debug.WriteLine("Process Message Graph: " + m.ToString()); ProcessMessageGraph(m, rtObjects); string s = m_Cache.GetWarnings(); if (s != null) { warningLog.Add(s); } } } else { return(null); } } else { string s = "CP3Manager: Input object is not a Chunk (ignoring): " + rtobj.ToString(); warningLog.Add(s); return(null); } return(rtObjects); }
/// <summary> /// if the chunk identifies the role, return the numeric value. Also look for the human name of the presenter. /// 1:instructor;2:shared display;3:student;other vaules:unknown. /// </summary> /// <param name="chunk"></param> /// <param name="presenterName"></param> /// <returns></returns> public static int AnalyzeChunk(UW.ClassroomPresenter.Network.Chunking.Chunk chunk, out string presenterName) { presenterName = ""; if (chunk.NumberOfChunksInMessage == 1) { MemoryStream ms = new MemoryStream(chunk.Data); BinaryFormatter formatter = new BinaryFormatter(); object decoded = null; try { decoded = formatter.Deserialize(ms); } catch (Exception e) { // Most likely a new or unknown message type Debug.WriteLine(e.ToString()); } if (decoded is CP3.Network.Messages.Message) { CP3.Network.Messages.Message m = (CP3.Network.Messages.Message)decoded; if (m is CP3Msgs.PresentationInformationMessage) { CP3Msgs.PresentationInformationMessage pim = (CP3Msgs.PresentationInformationMessage)m; return(1); } else if (m is CP3.Network.Messages.Network.ParticipantGroupAddedMessage) { CP3.Network.Messages.Network.ParticipantGroupAddedMessage gim = (CP3.Network.Messages.Network.ParticipantGroupAddedMessage)m; if (gim.Singleton) { presenterName = gim.FriendlyName; } return(0); } else if (m is UW.ClassroomPresenter.Network.Messages.Network.InstructorMessage) { Debug.WriteLine(m.ToString()); return(1); } else if (m is UW.ClassroomPresenter.Network.Messages.Network.StudentMessage) { Debug.WriteLine(m.ToString()); return(3); } else if (m is UW.ClassroomPresenter.Network.Messages.Network.PublicMessage) { Debug.WriteLine(m.ToString()); return(2); } } } return(0); }
private void addCp3Decks(UW.ClassroomPresenter.Network.Chunking.Chunk chunk) { if (chunk.NumberOfChunksInMessage == 1) { MemoryStream ms = new MemoryStream(chunk.Data); BinaryFormatter bf = new BinaryFormatter(); Object o = bf.Deserialize(ms); if (o is CP3.Network.Messages.Message) { ProcessCP3MessageGraph((CP3.Network.Messages.Message)o); } } else { Debug.WriteLine("Warning: DeckMatcher does not yet support multi-chunk messages"); } }
private void AcceptCP3Chunk(UW.ClassroomPresenter.Network.Chunking.Chunk chunk) { List <object> rtObjList = cp3Mgr.Accept(chunk); if ((rtObjList == null) || (rtObjList.Count == 0)) { if (cp3Mgr.WarningLog != null) { foreach (string s in cp3Mgr.WarningLog) { Debug.WriteLine(s); } cp3Mgr.WarningLog.Clear(); } FilterCP3RTUpdate(); return; } foreach (object rto in rtObjList) { if (rto is ArchiveRTNav.RTUpdate) { Debug.WriteLine("**CP3Mgr returns RtUpdate: " + ((RTUpdate)rto).ToString()); UpdateRTUpdate((RTUpdate)rto); FilterCP3RTUpdate(); } else if (rto is ArchiveRTNav.RTDrawStroke) { FilterRTDrawStroke((RTDrawStroke)rto); } else if (rto is ArchiveRTNav.RTDeleteStroke) { FilterRTDeleteStroke((RTDeleteStroke)rto); } else if (rto is ArchiveRTNav.RTTextAnnotation) { FilterRTTextAnnotation((RTTextAnnotation)rto); } else if (rto is ArchiveRTNav.RTImageAnnotation) { FilterRTImageAnnotation((RTImageAnnotation)rto); } else if ((rto is ArchiveRTNav.RTDeleteTextAnnotation)) { FilterRTDeleteTextAnnotation((RTDeleteTextAnnotation)rto); } else if ((rto is ArchiveRTNav.RTDeleteAnnotation)) { FilterRTDeleteAnnotation((RTDeleteAnnotation)rto); } else if (rto is ArchiveRTNav.RTEraseLayer) { ArchiveRTNav.RTEraseLayer rtel = (RTEraseLayer)rto; BufferChunk bc = new BufferChunk(Helpers.ObjectToByteArray(rtel)); enqueueMain(new WorkItem(bc, PacketType.ClearScribble, rtel.SlideIndex, rtel.DeckGuid)); } else if (rto is ArchiveRTNav.RTQuickPoll) { ArchiveRTNav.RTQuickPoll rtqp = (RTQuickPoll)rto; BufferChunk bc = new BufferChunk(Helpers.ObjectToByteArray(rtqp)); enqueueMain(new WorkItem(bc, PacketType.RTQuickPoll, rtqp.SlideIndex, rtqp.DeckGuid)); } else { Debug.WriteLine("CP3Manager returned unhandled archive type: " + rto.GetType().ToString()); } } }