示例#1
0
        /// <summary>
        /// Converts this OPC Packet instance to a byte array as specified by the OPC Protocol.
        /// https://github.com/scanlime/fadecandy/blob/master/doc/fc_protocol_opc.md
        /// </summary>
        /// <returns>Byte Array representation of the OPCCommand.</returns>
        public byte[] ToByteArray()
        {
            List <byte> returnValue = new byte[]
            {
                Channel,
                (byte)Command
            }.ToList();

            returnValue.AddRange(BitConverter.GetBytes(Length));
            returnValue.AddRange(Data);

            return(returnValue.ToArray());
        }
示例#2
0
        public void SendData(byte id, byte instruction, byte[] parameter = null)
        {
            var arrayData = new List <byte>();

            arrayData.Add(id);
            arrayData.Add(parameter == null ? (byte)2 : (byte)(parameter.Length + 2));
            arrayData.Add(instruction);
            if (parameter != null)
            {
                arrayData.AddRange(parameter);
            }

            arrayData.Add(Tools.CheckSum(arrayData.ToArray()));
            var sendData = new byte[] { 0xFF, 0xFF }.ToList();

            sendData.AddRange(arrayData);

            if (ShowDebugInfo)
            {
                Console.Write("发送指令>>>>>>:");
                sendData.ForEach(v => Console.Write(v.ToString("X2") + " "));
                Console.WriteLine();
            }
            _serialPort.Write(sendData.ToArray(), 0, sendData.Count);
        }
示例#3
0
        public void TestAgnosticToRepeatedDelimiterMultuple()
        {
            // setup
            var delimiter = new byte[] { 0 };

            // create processor
            var logger = new LoggerFactory().CreateLogger <SimpleMessageDataProcessor>();
            var proc   = SimpleMessageDataProcessor.CreateProcessor(logger, 500, 2);

            // test buffer with errors
            var buffer = new byte[] { 0, 1, 0, 0, 0, 0, 0, 1, 0 }.ToList(); // delimiter with length header (256 + 0) and error delimietrs more

            buffer.AddRange(Enumerable.Range(0, 34).Select(i => (byte)99));
            buffer.AddRange(new byte[] { 0, 1, 0 });
            buffer.AddRange(Enumerable.Range(0, 256).Select(i => (byte)99));

            // tesr ret
            var ret = proc.ProcessReceivedRawData(buffer.ToArray(), buffer.Count());

            Assert.AreEqual(256, ret.Last().Length);
        }
        //  public static void SendToAllConnected()
        //  {
        //_socket.
        //    }
        public ServerListReport(IPAddress listen, ushort port, Action <string, string> log, Action <string, string> logError, string gameName)
        {
            if (gameName != null)
            {
                _gameName = gameName;
            }
            List <byte> initialMessage = new byte[] { 0x09, 0x00, 0x00, 0x00, 0x00 }.ToList();

            initialMessage.AddRange(Encoding.ASCII.GetBytes(_gameName));
            initialMessage.Add(0x00);
            //Console.WriteLine("[initial:]" + _initialMessage[0] + _initialMessage[1] + _initialMessage[2] + _initialMessage[3] + _initialMessage[4] + ',' + _initialMessage[5] + ',' + _initialMessage[6] + ',' + _initialMessage[7] + ',' + _initialMessage[8] + ',' + _initialMessage[9]);
            _initialMessage = initialMessage.ToArray();
            //Console.WriteLine("[initial:]" + _initialMessage[0] + _initialMessage[1] + _initialMessage[2] + _initialMessage[3] + _initialMessage[4] + ',' + _initialMessage[5] + ',' + _initialMessage[6] + ',' + _initialMessage[7] + ',' + _initialMessage[8]);

            Log      = log;
            LogError = logError;

            GeoIP.Initialize(log, Category);

            Servers = new ConcurrentDictionary <string, GameServer>();

            Thread = new Thread(StartServer)
            {
                Name = "Server Reporting Socket Thread"
            };
            Thread.Start(new AddressInfo()
            {
                Address = listen,
                Port    = port
            });

            new Thread(StartCleanup)
            {
                Name = "Server Reporting Cleanup Thread"
            }.Start();

            new Thread(StartDynamicInfoReload)
            {
                Name = "Dynamic Info Reload Thread"
            }.Start();
        }
示例#5
0
        public void TestAgnosticToRepeatedDelimiter()
        {
            // setup
            var delimiter    = new byte[] { 0 };
            int headerLength = 2;

            // create processor
            var proc = new SimpleMessageDataProcessor(new LoggerFactory().CreateLogger <SimpleMessageDataProcessor>(),
                                                      500, delimiter, headerLength);

            // test buffer
            var buffer = new byte[] { 0, 1, 0 }.ToList(); // delimiter with length header (256 + 0)

            buffer.AddRange(Enumerable.Range(0, 256).Select(i => (byte)99));

            // tesr ret
            var ret = proc.ProcessReceivedRawData(buffer.ToArray(), buffer.Count());

            Assert.AreEqual(1, ret.Count());
            Assert.AreEqual(256, ret.First().Length);
        }