예제 #1
0
        /// <summary>
        /// 如果其他Session执行结束发送开始执行TestProjectTeardown的命令
        /// </summary>
        private void RunRootTearDownIfOtherSessionOver()
        {
            ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.TestGroupSession);

            startMessage.AddParam("RunTearDown", true.ToString());
            _globalInfo.MessageTransceiver.Send(startMessage);
        }
예제 #2
0
        public void Abort(int sessionId)
        {
            ControlMessage abortMessage = new ControlMessage(MessageNames.CtrlAbort, CommonConst.BroadcastSession);

            abortMessage.AddParam("IsRequest", true.ToString());
            abortMessage.Id = sessionId;
            _globalInfo.MessageTransceiver.Send(abortMessage);

            AbortEventInfo abortEventInfo = new AbortEventInfo(sessionId, true, false);

            _globalInfo.EventQueue.Enqueue(abortEventInfo);

            if (null == _abortBlocker)
            {
                _abortBlocker = new BlockHandle();
            }
            // 目前使用同步Abort,每次只能释放一个
            _abortBlocker.Timeout = _globalInfo.ConfigData.GetProperty <int>("AbortTimeout");
            bool isNotTimeout = _abortBlocker.Wait(Constants.AbortState);

            if (!isNotTimeout)
            {
                _globalInfo.LogService.Print(LogLevel.Warn, CommonConst.PlatformLogSession,
                                             $"Session {sessionId} abort timeout.");
            }
        }
예제 #3
0
        /// <summary>
        /// Request the additional of a keyframe at the given frame and post the associated control message.
        /// </summary>
        /// <param name="frameNumber">The keyframe frame number.</param>
        /// <param name="streamOffset">The stream position/bytes read (total) on this frame.</param>
        private void RequestKeyframe(uint frameNumber, uint offsetFrameNumber, long streamOffset)
        {
            if (HaveKeyframe(frameNumber) || !AllowKeyframes)
            {
                return;
            }

            // Add a placeholder.
            Keyframe keyframe = new Keyframe();

            keyframe.FrameNumber       = frameNumber;
            keyframe.OffsetFrameNumber = offsetFrameNumber;
            keyframe.StreamOffset      = streamOffset;
            lock (_keyframes)
            {
                _keyframes.Add(keyframe);
            }

            PacketBuffer   packet  = new PacketBuffer(PacketHeader.Size + 32);
            ControlMessage message = new ControlMessage();

            message.ControlFlags = 0;
            message.Value32      = frameNumber;
            message.Value64      = 0;

            packet.Reset((ushort)RoutingID.Control, (ushort)ControlMessageID.Keyframe);
            message.Write(packet);

            if (packet.FinalisePacket())
            {
                _packetQueue.Enqueue(packet);
            }
        }
예제 #4
0
        /// <summary>
        /// 如果TestProject的SetUp执行成功发送开始测试Session的命令
        /// </summary>
        private void StartTestSessionsIfSetUpOver(ISequenceTestResult result)
        {
            if (result.SessionId != CommonConst.TestGroupSession || result.SequenceIndex != CommonConst.SetupIndex)
            {
                return;
            }
            _globalInfo.EventDispatcher.SequenceOver -= StartTestSessionsIfSetUpOver;
            if (result.ResultState != RuntimeState.Success)
            {
                return;
            }
            ControlMessage startMessage = new ControlMessage(MessageNames.CtrlStart, CommonConst.BroadcastSession);

            startMessage.AddParam("RunAll", true.ToString());
            // 发送开始指令
            foreach (int session in _testsMaintainer.TestContainers.Keys)
            {
                if (session == CommonConst.TestGroupSession)
                {
                    continue;
                }
                startMessage.Id = session;
                _globalInfo.MessageTransceiver.Send(startMessage);
            }
        }
        private RemotePlayContext SendInitControlMessages(Socket udpClient)
        {
            /******** Initial control message 1 ********/

            byte[]         controlMessage1Payload            = HexUtil.Unhexlify("0064006400004823");
            ushort         initialControlMessage1PayloadSize = (ushort)(12 + controlMessage1Payload.Length);
            ControlMessage initialMessage1 = new ControlMessage(0, 0, 0, 0, 1, 0, initialControlMessage1PayloadSize, 0x4823, 0x19000);

            initialMessage1.UnParsedPayload = controlMessage1Payload;
            byte[]        initialControlMessage1Data = GetByteArrayForControlMessage(initialMessage1);
            ControlResult initControlResult1         = SendControlDataAndWaitForAnswer(udpClient, initialControlMessage1Data, 1, "Send Init Control message 1");

            if (!initControlResult1.WasSuccessful)
            {
                return(null);
            }

            ControlMessage initialAnswer1 = initControlResult1.ControlMessages[0];

            /******** Initial control message 2 ********/

            byte[]       initialAnswer1Payload = initialAnswer1.UnParsedPayload;
            MemoryStream memoryBuffer          = new MemoryStream(initialAnswer1Payload)
            {
                Position = 8
            };

            byte[] funcIncrBuffer = new byte[4];
            memoryBuffer.Read(funcIncrBuffer, 0, funcIncrBuffer.Length);
            uint funcIncrValue = ByteUtil.ByteArrayToUInt(funcIncrBuffer);

            memoryBuffer.Position = 28;
            byte[] lastAnswerPart = new byte[memoryBuffer.Length - memoryBuffer.Position];
            memoryBuffer.Read(lastAnswerPart, 0, lastAnswerPart.Length);
            byte[] funcIncr   = ByteUtil.UIntToByteArray(initialAnswer1.FuncIncr);
            byte[] classValue = ByteUtil.UIntToByteArray(initialAnswer1.ClassValue);

            byte[] controlMessage2Payload            = ByteUtil.ConcatenateArrays(funcIncr, classValue, funcIncr, lastAnswerPart);
            ushort initialControlMessage2PayloadSize = (ushort)(12 + controlMessage2Payload.Length);

            ControlMessage controlMessage2 = new ControlMessage(0, initialAnswer1.FuncIncr, 0, 0, 10, 0, initialControlMessage2PayloadSize, funcIncrValue, initialAnswer1.ReceiverId);

            controlMessage2.UnParsedPayload = controlMessage2Payload;
            byte[] initialControlMessage2Data = GetByteArrayForControlMessage(controlMessage2);

            ControlResult initControlResult2 = SendControlDataAndWaitForAnswer(udpClient, initialControlMessage2Data, 1, "Send Init Control message 2");

            if (!initControlResult2.WasSuccessful)
            {
                return(null);
            }

            RemotePlayContext remotePlayContext = new RemotePlayContext()
            {
                ReceiverId = initialAnswer1.FuncIncr,
                FuncIncr   = initialMessage1.FuncIncr
            };

            return(remotePlayContext);
        }
        /*********** heartbeat handling ***********/

        private void HandleHeartBeat(Socket udpSocket, RemotePlayContext remotePlayContext)
        {
            Thread heartBeatThread = new Thread(() =>
            {
                try
                {
                    do
                    {
                        Thread.Sleep(1000);
                        byte[] heartbeatPayload     = HexUtil.Unhexlify("000803");
                        ushort heartbeatPayloadSize = (ushort)(12 + heartbeatPayload.Length);
                        ControlMessage heartbeat    = new ControlMessage((byte)0, remotePlayContext.ReceiverId, 0, 0, 0, 1, heartbeatPayloadSize, remotePlayContext.FuncIncr, 0x10000);
                        heartbeat.UnParsedPayload   = heartbeatPayload;

                        SendCryptedControlMessage(heartbeat, remotePlayContext, udpSocket);
                    } while (true);
                }
                catch (Exception)
                {
                    // ignore
                }
            });

            heartBeatThread.IsBackground = true;
            heartBeatThread.Start();
        }
        public void MainTest()
        {
            using (var session = Domain.OpenSession())
                using (var t = session.OpenTransaction()) {
                    var controlId = Guid.NewGuid();
                    var messageId = Guid.NewGuid();
                    var control   = new Control(controlId);
                    var message   = new ControlMessage(messageId)
                    {
                        Owner = control
                    };
                    session.SaveChanges();

                    var ids    = new[] { controlId, messageId };
                    var itemsX = session.Query.All <Control>().Where(a => a.Messages.Select(b => b.Id).Any(id => ids.Contains(id))).ToList();
                    Assert.AreEqual(1, itemsX.Count);
                    Assert.AreSame(control, itemsX[0]);
                    var itemsA = session.Query.All <Control>().Where(a => ids.Any(id => a.Messages.Select(b => b.Id).Contains(id))).ToList();
                    Assert.AreEqual(1, itemsA.Count);
                    Assert.AreSame(control, itemsA[0]);
                    var itemsB = session.Query.All <Control>().Where(a => ids.ContainsAny(a.Messages.Select(b => b.Id))).ToList();
                    Assert.AreEqual(1, itemsB.Count);
                    Assert.AreSame(control, itemsB[0]);
                    t.Complete();
                }
        }
예제 #8
0
        public void BrodcastMessage(ControlMessage message)
        {
            if (Adresses == null || Adresses.Count == 0)
            {
                throw new InvalidOperationException("Set Addresses list first!");
            }

            if (!SenderID.HasValue)
            {
                throw new InvalidOperationException("Set SenderID first!");
            }

            Adresses.ForEach(address =>
            {
                using (ZSocket requester = new ZSocket(ZContextProvider.GlobalContext, ZSocketType.REQ))
                {
                    requester.Connect(address);
                    requester.Send(new ZFrame(BinarySerializer <ControlMessage> .ToByteArray(message)));

                    using (ZFrame reply = requester.ReceiveFrame())
                    {
                        ControlMessage rcvedMsg = BinarySerializer <ControlMessage> .ToObject(reply.Read());
                    }
                }
            });
        }
예제 #9
0
    static void OnEditorMessage(ControlMessage msg)
    {
        switch (msg.msg)
        {
        case ControlMessage.Message.TIMELINECTRL_BEGIN_DRAG_TAG:
        case ControlMessage.Message.TIMELINECTRL_DRAG_TAG:
        case ControlMessage.Message.TIMELINECTRL_END_DRAG_TAG:
            break;

        case ControlMessage.Message.TIMELINECTRL_BEGIN_DRAG_ITEMS:
            OnTimeLineDragItemsBegin(msg.sender, msg.param0 as List <TimeLineViewCtrl.ItemSelectInfo>);
            break;

        case ControlMessage.Message.TIMELINECTRL_DRAG_ITEMS:
            OnTimeLineDragItems(msg.sender, msg.param0 as List <TimeLineViewCtrl.ItemSelectInfo>);
            break;

        case ControlMessage.Message.TIMELINECTRL_END_DRAG_ITEMS:
            OnTimeLineDragItemsEnd(msg.sender, msg.param0 as List <TimeLineViewCtrl.ItemSelectInfo>);
            break;

        default:
            break;
        }
    }
예제 #10
0
        private void ProcessControlMessage(ControlMessage message)
        {
            switch (message.Name)
            {
            case MessageNames.CtrlStart:
                _context.CtrlStartMessage = message;
                break;

            case MessageNames.CtrlAbort:
                _context.Cancellation.Cancel();
                _context.DebugManager.Dispose();

                // 如果线程还未结束,则等待
                if (_context.FlowControlThread.IsAlive)
                {
                    if (_context.FlowControlThread.Join(_context.GetProperty <int>("AbortTimeout")))
                    {
                        SlaveFlowTaskBase.CurrentFlowTask?.TaskAbortAction();
                    }
                    else
                    {
                        _context.FlowControlThread.Abort();
                    }
                    _context.CoroutineManager.Dispose();
                }
                break;
            }
        }
예제 #11
0
 protected override ScenarioResult internalRun(CancellationToken ct)
 {
     try
     {
         int t;
         for (t = 0; t < nTimes; t++)
         {
             MfeMessage m;
             if ((t & 1) == 0)
             {
                 //m = new GetMomenteryStatusMessage();
                 m = new ControlMessage(true, 1, ControlMessage.TxAntenna.ANT0, ControlMessage.Frequency.HIGH, false, (ushort)t, false);
             }
             else
             {
                 //m = new GetVersionMessage();
                 m = new ControlMessage(true, 1, ControlMessage.TxAntenna.ANT1, ControlMessage.Frequency.HIGH, false, (ushort)t, false);
             }
             device.sendMsg(m);
             //MfeResponse resp = (MfeResponse)device.receiveAnswer(new System.Threading.CancellationToken());
             //if (resp == null)
             //{
             //    throw new CommTestScenarioException();
             //}
             Thread.Sleep(waitTime);
         }
     } catch (Exception)
     {
         throw new CommTestScenarioException();
     }
     return(new ScenarioResult(ScenarioResult.RunResult.Pass));
 }
예제 #12
0
        public override Task <RoutingResponse> EnqueueControlMessage(ControlMessage request, ServerCallContext context)
        {
            RoutingResponse response;

            using (this.m_duration.NewTimer()) {
                this.m_logger.LogDebug("Received egress routing request for sensor {sensorId}.", request.SensorID);

                try {
                    var dto = ControlMessageProtobufConverter.Convert(request);

                    this.m_requests.Inc();
                    this.m_queue.Add(dto);

                    response = new RoutingResponse {
                        Count      = 1,
                        Message    = "Messages queued.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                } catch (FormatException ex) {
                    this.m_logger.LogWarning("Received messages from an invalid sensor. Exception: {exception}", ex);

                    response = new RoutingResponse {
                        Count      = 0,
                        Message    = "Messages not queued. Invalid sensor ID.",
                        ResponseID = ByteString.CopyFrom(Guid.NewGuid().ToByteArray())
                    };
                }
            }

            return(Task.FromResult(response));
        }
예제 #13
0
        static TransportMessage CreateControlMessage(Type eventType)
        {
            var subscriptionMessage = ControlMessage.Create(Address.Local);

            subscriptionMessage.Headers[Headers.SubscriptionMessageType] = eventType.AssemblyQualifiedName;
            return(subscriptionMessage);
        }
예제 #14
0
        private void WriteRecordingHeader(BinaryWriter writer)
        {
            // First write a server info message to define the coordinate frame and other server details.
            PacketBuffer   packet        = new PacketBuffer();
            PacketHeader   header        = PacketHeader.Default;
            ControlMessage frameCountMsg = new ControlMessage();

            header.RoutingID = (ushort)RoutingID.ServerInfo;

            packet.Reset();
            packet.WriteHeader(header);
            _serverInfo.Write(packet);
            packet.FinalisePacket();
            packet.ExportTo(writer);

            // Next write a placeholder control packet to define the total number of frames.
            header.RoutingID     = (ushort)RoutingID.Control;
            header.MessageID     = (ushort)ControlMessageID.FrameCount;
            header.PayloadSize   = 0;
            header.PayloadOffset = 0;

            frameCountMsg.ControlFlags = 0;
            frameCountMsg.Value32      = 0; // Placeholder. Frame count is currently unknown.
            frameCountMsg.Value64      = 0;
            packet.Reset();
            packet.WriteHeader(header);
            frameCountMsg.Write(packet);
            packet.FinalisePacket();
            packet.ExportTo(writer);
        }
예제 #15
0
        protected override void Stop()
        {
            if (_stopFlag == 1)
            {
                return;
            }
            _cancellation.Cancel();
            Thread.MemoryBarrier();
            ModuleUtils.StopThreadWork(_receiveThread);
            //如果两个队列在被锁的状态则释放锁
            _engineMessageQueue.FreeBlocks();
            _statusMessageQueue.FreeBlocks();
            _callBackMessageQueue.FreeBlocks();
            // 发送停止消息,该消息只是为了释放被Receive阻塞的线程,并不会真的被处理
            ControlMessage stopMessage = new ControlMessage(MessageNames.CtrlAbort, CommonConst.BroadcastSession);

            UpLinkMessenger.Send(stopMessage);

            Thread.MemoryBarrier();

            ModuleUtils.StopThreadWork(_engineMessageListener);
            ModuleUtils.StopThreadWork(_statusMessageListener);
            ModuleUtils.StopThreadWork(_callBackMessageListener);
            ModuleUtils.StopThreadWork(_receiveThread);
            ZombieCleaner.Stop();
            UpLinkMessenger.Clear();
            Thread.VolatileWrite(ref _stopFlag, 1);
            GlobalInfo.LogService.Print(LogLevel.Info, CommonConst.PlatformLogSession,
                                        "Message transceiver stopped.");
        }
예제 #16
0
        public bool BrodcastMessageWithResult(ControlMessage message, MessageTypes wantedType)
        {
            bool succes = true;

            if (Adresses == null || Adresses.Count == 0)
            {
                throw new InvalidOperationException("Set Addresses list first!");
            }

            if (!SenderID.HasValue)
            {
                throw new InvalidOperationException("Set SenderID first!");
            }

            Adresses.ForEach(address =>
            {
                using (ZSocket requester = new ZSocket(ZContextProvider.GlobalContext, ZSocketType.REQ))
                {
                    requester.Connect(address);
                    requester.Send(new ZFrame(BinarySerializer <ControlMessage> .ToByteArray(message)));

                    using (ZFrame reply = requester.ReceiveFrame())
                    {
                        ControlMessage rcvedMsg = BinarySerializer <ControlMessage> .ToObject(reply.Read());
                        succes = succes && rcvedMsg.Type.Equals(wantedType);
                    }
                }
            });

            return(succes);
        }
예제 #17
0
        private bool HandleControlMessage(ControlMessage message)
        {
            int    session = message.Id;
            string name    = message.Name;

            switch (name)
            {
            case MessageNames.CtrlAbort:
                bool           abortSuccess   = bool.Parse(message.Params["AbortSuccess"]);
                AbortEventInfo abortEventInfo = new AbortEventInfo(session, false, abortSuccess);
                if (!abortSuccess && message.Params.ContainsKey("Message"))
                {
                    abortEventInfo.FailInfo = message.Params["Message"];
                }
                _globalInfo.EventQueue.Enqueue(abortEventInfo);
                _testsMaintainer.FreeHost(session);
                // 如果所有的都已经结束,则修改状态机状态
                if (0 == _testsMaintainer.TestContainers.Count)
                {
                    _globalInfo.StateMachine.State = RuntimeState.Abort;
                }
                // 同步释放,每个Session的停止都是同步执行的。
                _blockHandle.Free(Constants.AbortState);
                break;

            default:
                throw new InvalidOperationException();
            }
            return(true);
        }
예제 #18
0
        public static Measurement Convert(ControlMessage message)
        {
            var builder = new MeasurementBuilder();
            var token   = JToken.Parse(message.Data);

            if (token["latitude"] != null && token["longitude"] != null)
            {
                var lat = token["latitude"].ToObject <double>();
                var lon = token["longitude"].ToObject <double>();

                builder.WithCoordinates(lon, lat);
            }

            if (token["telegram"] == null)
            {
                throw new InvalidOperationException("Unable to parse telegram without a telegram.");
            }

            builder.WithTimestamp(token["timestamp"].ToObject <DateTime>());
            builder.WithSensorId(message.SensorId);

            var base64 = token["telegram"].ToString();
            var bytes  = System.Convert.FromBase64String(base64);

            var tmp = Encoding.UTF8.GetString(bytes);

            tmp = tmp.Replace(Needle, "");
            var data = JToken.Parse(tmp);

            builder.WithDataPoint("pressure", "Pa", data["p"].ToObject <decimal>(), 0.1);
            builder.WithDataPoint("temperature", "C", data["t"].ToObject <decimal>(), 0.1);
            builder.WithDataPoint("rh", "%", data["rh"].ToObject <decimal>(), 0.00001);

            return(builder.Build());
        }
예제 #19
0
        public void Abort(int sessionId)
        {
            this._globalInfo.StateMachine.State = RuntimeState.AbortRequested;
            if (sessionId == CommonConst.TestGroupSession || sessionId == CommonConst.BroadcastSession)
            {
                foreach (int session in _testsMaintainer.TestContainers.Keys)
                {
                    Abort(session);
                }
            }
            else
            {
                ControlMessage abortMessage = new ControlMessage(MessageNames.CtrlAbort, CommonConst.BroadcastSession);
                abortMessage.AddParam("IsRequest", true.ToString());
                abortMessage.Id = sessionId;
                _globalInfo.MessageTransceiver.Send(abortMessage);

                AbortEventInfo abortEventInfo = new AbortEventInfo(sessionId, true, false);
                _globalInfo.EventQueue.Enqueue(abortEventInfo);

                // 目前使用同步Abort,每次只能释放一个
                _blockHandle.Timeout = _globalInfo.ConfigData.GetProperty <int>("AbortTimeout");
                _blockHandle.Wait(Constants.AbortState);
            }
        }
예제 #20
0
        public static TextTelegram Convert(ControlMessage message)
        {
            var telegram = new TextTelegram();
            var token    = JToken.Parse(message.Data);

            if (token["latitude"] != null && token["longitude"] != null)
            {
                telegram.Latitude  = token["latitude"].ToObject <double>();
                telegram.Longitude = token["longitude"].ToObject <double>();
            }
            else
            {
                telegram.Longitude = telegram.Latitude = 0D;
            }

            if (token["telegram"] == null)
            {
                throw new InvalidOperationException("Unable to parse telegram without a telegram.");
            }

            telegram.Timestamp = token["timestamp"].ToObject <DateTime>();
            var base64 = token["telegram"].ToString();
            var bytes  = System.Convert.FromBase64String(base64);

            telegram.Telegram = Encoding.UTF8.GetString(bytes);

            return(telegram);
        }
예제 #21
0
        public static void RunService(string listeningAddress, int processesAmount)
        {
            using (ZSocket responser = new ZSocket(ZContextProvider.GlobalContext, ZSocketType.REP))
            {
                responser.Bind(listeningAddress);

                for (int i = 1; i < processesAmount + 1; i++)
                {
                    ZFrame         frame   = responser.ReceiveFrame();
                    ControlMessage message = BinarySerializer <ControlMessage> .ToObject(frame.Read());

                    int          idToResponse = i;
                    MessageTypes responseType = MessageTypes.IDSet;

                    if (message.Type != MessageTypes.IDRequest)
                    {
                        idToResponse = -1;
                        responseType = MessageTypes.Reset;
                        i--;
                    }

                    ZFrame responseFrame = MessageFactory.CreateMessageZFrame(0, -1, -1, idToResponse, responseType);
                    responser.Send(responseFrame);
                }
            }
        }
예제 #22
0
 /// <summary>
 /// Send a control message to the server to say that the client has ended
 /// </summary>
 private static void NotifyClientEnded()
 {
     if (clientSocket != null)
     {
         ControlMessage msg = new ControlMessage(ControlType.NotificationOfEnd);
         SendMessage(msg);
     }
 }
예제 #23
0
 /// <summary>
 /// Sends a ControlMessage to NGRID server.
 /// </summary>
 /// <param name="message">Message to send</param>
 public void SendMessage(ControlMessage message)
 {
     SendMessageInternal(new NGRIDControllerMessage
     {
         MessageData             = NGRIDSerializationHelper.SerializeToByteArray(message),
         ControllerMessageTypeId = message.MessageTypeId
     });
 }
예제 #24
0
        public static void Pardon(string username)
        {
            ControlMessage cm = new ControlMessage();

            cm.Pardon          = new Pardon();
            cm.Pardon.Username = username;
            Send(cm);
        }
예제 #25
0
 //用于控件发送消息
 public void PostMessage(ControlMessage.Message msg, object p0 = null, object p1 = null)
 {
     if (null != Root)
     {
         ControlMessage newMsg = new ControlMessage(this, msg, p0, p1);
         Root.EnqueueMessage(newMsg);
     }
 }
        public void SignControlMessage(ControlMessage message, string json)
        {
            using var sha = SHA256.Create();
            var binary = Encoding.ASCII.GetBytes(json);
            var hash   = sha.ComputeHash(binary);

            message.Secret = BytesToHex(hash, false);
        }
예제 #27
0
        public void ClearDeferredMessages(string headerKey, string headerValue)
        {
            var controlMessage = ControlMessage.Create(Address.Local);

            controlMessage.Headers[headerKey] = headerValue;
            controlMessage.Headers[TimeoutManagerHeaders.ClearTimeouts] = Boolean.TrueString;

            MessageSender.Send(controlMessage, TimeoutManagerAddress);
        }
예제 #28
0
        public static void Kick(MineProxy.Control.Player player, string reason)
        {
            ControlMessage cm = new ControlMessage();

            cm.Kick          = new Kick();
            cm.Kick.Username = player.Username;
            cm.Kick.Reason   = reason;
            Send(cm);
        }
예제 #29
0
        public void LaunchInviteWindow(ControlMessage msg)
        {
            InviteWindow inviteWin = new InviteWindow(msg.Sender, msg.ChatName, msg.Chat, msg.ID);

            this.BeginInvoke((MethodInvoker) delegate() {
                inviteWin.BringToFront();
                inviteWin.Show();
            });
        }
 private byte[] GetByteArrayForControlMessage(ControlMessage controlMessage)
 {
     using (MemoryStream memoryStream = new MemoryStream())
         using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
         {
             controlMessage.Serialize(binaryWriter);
             return(((MemoryStream)binaryWriter.BaseStream).ToArray());
         }
 }
예제 #31
0
 private void SendUserUpdateMessage(WebMeeting.Common.ClientProfile clientUpdated)
 {
     ControlMessage m = new ControlMessage(ControlCode.AttendeeUpdate);
     m.Parameter = clientUpdated;
     ((IMessageReceiver) this._dispatcher.TransparentProxy).ReceiveMessage(m);
     m = null; //GC
     GC.Collect(); //GC
 }
예제 #32
0
        /// <summary>
        /// Send a control message to all the attendees in the conference
        /// </summary>
        /// <param name="ctrlCode"> Control code identifying this message </param>
        /// <param name="param"> Any extra info needed by the clients </param>
        public void BroadcastControlMessage(ControlCode ctrlCode, Object param)
        {
            try
            {
                ControlMessage ctrlMsg;
                //
                // Construct a control message
                //
                ctrlMsg = new ControlMessage(ctrlCode);
                ctrlMsg.Parameter = param;
                ctrlMsg.SenderID=-1;

                //
                // Send the message to all the clients in the conference
                //
                ((IMessageReceiver) this._dispatcher.TransparentProxy).ReceiveMessage(ctrlMsg);
                ctrlMsg = null; //GC
                GC.Collect(); //GC
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
예제 #33
0
        private void comboMood_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int nIndex = 12;
                if(comboMood.SelectedIndex == 0)
                    nIndex = 10;
                else if(comboMood.SelectedIndex == 1)
                    nIndex =  11;
                else if(comboMood.SelectedIndex == 2)
                    nIndex = 12;
                else if(comboMood.SelectedIndex == 3)
                    nIndex =  13;
                else if(comboMood.SelectedIndex == 4)
                    nIndex = 14;

                NetworkManager.getInstance().profile.m_MoodIndicatorColor =(MoodIndicator) nIndex;

                ControlMessage m = new ControlMessage(ControlCode.AttendeeUpdate);
                m.SenderID = -1;//network.profile.ClientId;
                m.Parameter = NetworkManager.getInstance().profile;
                NetworkManager.getInstance().SendLoadPacket(m);
                //Trace.WriteLine("line 371 dotnetstatusbar message of attendee update");
                NetworkManager.getInstance().myRecvMsgList.Add(m);

            }
            catch(Exception ex)
            {
                Trace.WriteLine("Exception at the place of status bar comboMood_SelectedIndexChanged :"+ex.ToString());
                ex=ex;
            }
        }
            public static bool ValidateRunAs(ProjectionMode mode, ReadWrite readWrite, IPrincipal existingRunAs, ControlMessage message, bool replace = false)
            {
                if (mode > ProjectionMode.Transient && readWrite == ReadWrite.Write
                    && (message.RunAs == null || message.RunAs.Principal == null
                        || !message.RunAs.Principal.IsInRole(SystemRoles.Admins)))
                {
                    message.Envelope.ReplyWith(new NotAuthorized());
                    return false;
                }

                if (replace && message.RunAs.Principal == null)
                {
                    message.Envelope.ReplyWith(new NotAuthorized());
                    return false;
                }
                if (replace && message.RunAs.Principal != null)
                    return true; // enable this operation while no projection permissions are defined

                return true;

                //if (existingRunAs == null)
                //    return true;
                //if (message.RunAs.Principal == null
                //    || !string.Equals(
                //        existingRunAs.Identity.Name, message.RunAs.Principal.Identity.Name,
                //        StringComparison.OrdinalIgnoreCase))
                //{
                //    message.Envelope.ReplyWith(new NotAuthorized());
                //    return false;
                //}
                //return true;
            }
예제 #35
0
        /// <summary>
        /// Send User joining message  to all participant  in the meeting
        /// This method is called from AttachClient.
        /// </summary>
        /// <param name="newlyJoined">profile of new comming participant</param>
        public void SendUserJoinMessage(WebMeeting.Common.ClientProfile newlyJoined)
        {
            ControlMessage m = new ControlMessage(ControlCode.AttendeeJoin);
            m.SenderID =-1;
            m.Parameter= newlyJoined;
            ((IMessageReceiver) this._dispatcher.TransparentProxy).ReceiveMessage(m);

            m = null; //GC
            GC.Collect(); //GC
        }