Inheritance: IDisposable
コード例 #1
0
 public Listener(GoFree goFree)
 {
     _goFree = goFree;
 }
コード例 #2
0
 public void Subscribe(GoFree goFree)
 {
     goFree.Tick += new GoFree.TickHandler(HeardIt);
 }
コード例 #3
0
        static void Main(string[] args)
        {
            var options = new Options();
            CommandLine.ParserSettings parserSettings = new ParserSettings();
            parserSettings.HelpWriter = Console.Error;
            CommandLine.Parser parser = new Parser(parserSettings);
            if (parser.ParseArguments(args, options))
            {
                if (options.Verbose)
                {
                    Console.WriteLine(options.Model);
                    Console.WriteLine(options.IP);
                    Console.WriteLine(options.Port);
                }
            }
            else
            {
                Environment.Exit(1);
            }

            string output;
            /*
            string test1 = "{\"SettingInfo\":[{\"id\":40, \"name\":\"Boat Type\", \"type\":1, \"values\":[{\"id\":0, \"title\":\"Sailing\"}, {\"id\":1,\"title\":\"Fishing\"}, {\"id\":2, \"title\":\"Planing\" }]}]}";
            RootSettingInfo rootSettingInfo1 = JsonConvert.DeserializeObject<RootSettingInfo>(test1);

            string test2 = "{\"SettingInfo\":[{\"id\":1,\"name\":\"Backlight Level\",\"type\":2,\"low\":0,\"high\":10}]}";
            RootSettingInfo rootSettingInfo2 = JsonConvert.DeserializeObject<RootSettingInfo>(test2);

            string test3 = "{\"SettingInfo\":[{\"id\":2,\"name\":\"Night Mode\",\"type\":3}]}";
            RootSettingInfo rootSettingInfo3 = JsonConvert.DeserializeObject<RootSettingInfo>(test3);
            */

            Navico.NavicoDiscovery.MFD websocketMFD = null;

            if ((options.IP == null) && (options.Port == null))
            {
                List<Navico.NavicoDiscovery.MFD> MFDList = new List<Navico.NavicoDiscovery.MFD>();

                Thread newThread;
                newThread = new Thread(() => Navico.NavicoDiscovery.ReceiveNewMessage(MFDList));
                newThread.IsBackground = true;
                newThread.Start();

                newThread.Join();

                foreach (Navico.NavicoDiscovery.MFD mfd in MFDList)
                {
                    if (options.Model != null)
                    {
            //                        if (string.Compare(mfd.Model, options.Model, true) != 0)
                        if (mfd.Model.IndexOf(options.Model) != 0)
                        {
                            continue;
                        }
                    }
                    if (options.IP != null)
                    {
            //                        if (string.Compare(mfd.IP, options.IP, true) != 0)
                        if (mfd.IP.IndexOf(options.IP) != 0)
                        {
                            continue;
                        }
                    }

                    DbgOutput(string.Format("MFD: {0}\tModel: {1}\tIP: {2}", mfd.Name, mfd.Model, mfd.IP));
                    foreach (Navico.NavicoDiscovery.MFDService service in mfd.Services)
                    {
                        DbgOutput(string.Format("\tService: {0}\tVersion: {1}\tPort: {2}", service.Service, service.Version, service.Port));

                        if ((service.Service == "navico-nav-ws") /*|| (service.Service == "navico-navdata-websocket")*/)
                        {
                            if (websocketMFD == null)
                            {
                                websocketMFD = mfd;
                                websocketMFD.Services = null;
                                websocketMFD.Services = new NavicoDiscovery.MFDService[1];
                                websocketMFD.Services[0] = service;
                            }
                        }
                    }
                }

                if (websocketMFD == null)
                {
                    return;
                }
            }
            else
            {
                websocketMFD = new NavicoDiscovery.MFD();
                websocketMFD.IP = options.IP;
                websocketMFD.Services = new NavicoDiscovery.MFDService[1];

                uint port = 2053;
                if (!options.Port.IsNullOrEmpty())
                {
                    port = Convert.ToUInt32(options.Port);
                }
                websocketMFD.Services[0] = new NavicoDiscovery.MFDService("navico-nav-ws", 0, port);
            }

            DbgOutput(string.Format("Connect to {0}:{1}", websocketMFD.IP, websocketMFD.Services[0].Port));

            string wsURL;
            wsURL = string.Format("ws://{0}:{1}", websocketMFD.IP, websocketMFD.Services[0].Port);
            //wsURL = string.Format("ws://172.28.29.224:2053");
            using (GoFree streamer = new GoFree(wsURL))
            {
                Listener l = new Listener(streamer);
                l.Subscribe(streamer);
                streamer.Connect();

                Thread.Sleep(500);
                Console.WriteLine("\nType \"exit\" to exit.\n");

                string data;

                if (options.RequestingAListOfDataIDs)
                {
                    DbgOutput("Requesting a list of data IDs");

            //                    data = "{\"DataListReq\":{\"group\":1}}";
            //                    streamer.Write(data);

                    RootDataListReq rootDataListReq = new RootDataListReq();
                    rootDataListReq.DataListReq = new DataListReq();

                    foreach (eDataGroup dataGroup in System.Enum.GetValues(typeof(eDataGroup)))
                    {
                        rootDataListReq.DataListReq.group = (int)dataGroup;
                        data = JsonConvert.SerializeObject(rootDataListReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RequestFullInformationAboutADataValue)
                {
                    DbgOutput("Request full information about a data value");

            //                    data = "{\"DataInfoReq\":[40]}";
            //                    streamer.Write(data);

                    foreach (eDataType dataType in System.Enum.GetValues(typeof(eDataType)))
                    {
                        RootDataInfoReq rootDataInfoReq = new RootDataInfoReq();
                        rootDataInfoReq.DataInfoReq = new List<int>();
                        rootDataInfoReq.DataInfoReq.Add((int)dataType);
                        data = JsonConvert.SerializeObject(rootDataInfoReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RequestingAValue)
                {
                    DbgOutput("Requesting a value");

            //                    data = "{\"DataReq\":[{\"id\":1,\"repeat\":false,\"inst\":0}]}";
            //                    streamer.Write(data);

                    foreach (eDataType dataType in System.Enum.GetValues(typeof(eDataType)))
                    {
                        RootDataReq rootDataReq = new RootDataReq();
                        rootDataReq.DataReq = new List<DataReq>();
                        DataReq dataReq = new DataReq();
                        dataReq.id = (int)dataType;
                        rootDataReq.DataReq.Add(dataReq);
                        data = JsonConvert.SerializeObject(rootDataReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RequestASettingsGroup)
                {
                    DbgOutput("Request a settings group");

            //                    data = "{\"SettingListReq\":[{\"group\":1}]}";
            //                    streamer.Write(data);

                    foreach (eDataGroup dataGroup in System.Enum.GetValues(typeof(eDataGroup)))
                    {
                        RootSettingListReq rootSettingListReq = new RootSettingListReq();
                        rootSettingListReq.SettingListReq = new List<SettingListReq>();
                        SettingListReq settingListReq = new SettingListReq();
                        settingListReq.groupId = (int)dataGroup;
                        rootSettingListReq.SettingListReq.Add(settingListReq);
                        data = JsonConvert.SerializeObject(rootSettingListReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RequestSettingInformation)
                {
                    DbgOutput("Request setting information");

            //                    data = "{\"SettingInfoReq\":[1]}";
            //                    streamer.Write(data);

                    foreach (eSettingIDs setting in System.Enum.GetValues(typeof(eSettingIDs)))
                    {
                        RootSettingInfoReq rootSettingInfoReq = new RootSettingInfoReq();
                        rootSettingInfoReq.SettingInfoReq = new List<int>();
                        rootSettingInfoReq.SettingInfoReq.Add((int)setting);
                        data = JsonConvert.SerializeObject(rootSettingInfoReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RequestAListOfSettings)
                {
                    DbgOutput("Request a list of settings");

            //                    data = "{\"SettingReq\":{\"ids\":[1,2,3],\"register\":false}}";
            //                    streamer.Write(data);

                    foreach (eSettingIDs setting in System.Enum.GetValues(typeof(eSettingIDs)))
                    {
                        RootSettingReq rootSettingReq = new RootSettingReq();
                        rootSettingReq.SettingReq = new SettingReq();
                        rootSettingReq.SettingReq.ids = new List<int>();
                        rootSettingReq.SettingReq.ids.Add((int)setting);
                        data = JsonConvert.SerializeObject(rootSettingReq);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

                if (options.RegisterToReceiveAnEvent)
                {
                    DbgOutput("Register to receive an event");

            //                    data = "{\"EventReg\":[1,2]}";
            //                    streamer.Write(data);

                    foreach (eEvents eventValue in System.Enum.GetValues(typeof(eEvents)))
                    {
                        RootEventReg rootEventReg = new RootEventReg();
                        rootEventReg.EventReg = new List<int>();
                        rootEventReg.EventReg.Add((int)eventValue);
                        data = JsonConvert.SerializeObject(rootEventReg);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }

            /*
                if (true)
                {
                    DbgOutput("Set event");

                    foreach (eEvents eventValue in System.Enum.GetValues(typeof(eEvents)))
                    {
                        RootEventSet rootEventSet = new RootEventSet();
                        rootEventSet.EventSet = new List<EventSet>();
                        EventSet eventSet = new EventSet();
                        eventSet.id = (int)eventValue;
                        eventSet.
                        rootEventSet.EventSet.Add(eventSet);
                        data = JsonConvert.SerializeObject(rootEventSet);
                        streamer.Write(data);
                    }

                    Thread.Sleep(1000);
                }
            */

                if (options.MOBEvent)
                {
                    DbgOutput("MOB event");

                    RootEventSet rootEventSet = new RootEventSet();
                    rootEventSet.EventSet = new List<EventSet>();
                    EventSet eventSet = new EventSet();
                    eventSet.id = (int)eEvents.MOB;
                    eventSet.name = "MOB";
                    eventSet.active = true;
                    rootEventSet.EventSet.Add(eventSet);
                    data = JsonConvert.SerializeObject(rootEventSet);
                    streamer.Write(data);

                    Thread.Sleep(1000);
                }

                if (options.CreateAWaypoint)
                {
                    DbgOutput("Create a waypoint");

                    RootEventSet rootEventSet = new RootEventSet();
                    rootEventSet.EventSet = new List<EventSet>();
                    EventSet eventSet = new EventSet();
                    eventSet.id = (int)eEvents.WaypointCreate;
                    eventSet.latitude = 50.9892;
                    eventSet.longitude = -1.4975;
                    eventSet.wpName = "Waypoint1";
                    rootEventSet.EventSet.Add(eventSet);
                    data = JsonConvert.SerializeObject(rootEventSet);
                    streamer.Write(data);

                    Thread.Sleep(1000);
                }

                if (options.ActivateSilenceAcknowledgeDeactivateAnAlarm)
                {
                    DbgOutput("Activate/Silence/Acknowledge/Deactivate an alarm");

                    RootEventSet rootEventSet = new RootEventSet();
                    rootEventSet.EventSet = new List<EventSet>();
                    EventSet eventSet = new EventSet();
            //                    eventSet.id = (int)eEvents.AlarmActivate;
                    eventSet.id = (int)eEvents.AlarmSilence;
            //                    eventSet.id = (int)eEvents.AlarmAcknowledge;
            //                    eventSet.id = (int)eEvents.AlarmDeactivate;
                    eventSet.alarmId = 5;
                    eventSet.alarmText = "Low Speed";
                    eventSet.severity = 1;
                    rootEventSet.EventSet.Add(eventSet);
                    data = JsonConvert.SerializeObject(rootEventSet);
                    streamer.Write(data);

                    Thread.Sleep(1000);
                }

                if (options.ResetATripLog)
                {
                    DbgOutput("Reset a trip log");

                    RootEventSet rootEventSet = new RootEventSet();
                    rootEventSet.EventSet = new List<EventSet>();
                    EventSet eventSet = new EventSet();
                    eventSet.id = (int)eEvents.TripLogReset;
                    eventSet.inst = 0;
                    rootEventSet.EventSet.Add(eventSet);
                    data = JsonConvert.SerializeObject(rootEventSet);
                    streamer.Write(data);

                    Thread.Sleep(1000);
                }

                if (options.RegisterForVesselsId)
                {
                    DbgOutput("Register for vessels (id)");

            //                    data = "{\"TrafficReq\":{\"subscribe\":true,\"id\":12345,\"sourceType\":0}}";
            //                    streamer.Write(data);

                    RootTrafficReq rootTrafficReq = new RootTrafficReq();
                    rootTrafficReq.TrafficReq = new TrafficReq();
                    rootTrafficReq.TrafficReq.subscribe = true;
                    rootTrafficReq.TrafficReq.id = 12345;
                    rootTrafficReq.TrafficReq.sourceType = 0;
                    data = JsonConvert.SerializeObject(rootTrafficReq);
                    streamer.Write(data);

                    Thread.Sleep(1000);
                }

                if (options.RegisterForVesselsType)
                {
                    DbgOutput("Register for vessels (type)");

            //                    data = "{\"TrafficReg\":[0,2]}";
            //                    streamer.Write(data);

                    RootTrafficReg rootTrafficReg = new RootTrafficReg();
                    rootTrafficReg.TrafficReg = new List<int>();
                    rootTrafficReg.TrafficReg.Add(0);
                    rootTrafficReg.TrafficReg.Add(2);
                    data = JsonConvert.SerializeObject(rootTrafficReg);
                    streamer.Write(data);
                }

                while (true)
                {
                    Thread.Sleep(500);

                    Console.Write("> ");
                    data = Console.ReadLine();
                    if (data == "exit")
                    {
                        break;
                    }

                    streamer.Write(data);
                }
            }
        }