예제 #1
0
 public void Subscribe(GoFree goFree)
 {
     goFree.Tick += new GoFree.TickHandler(HeardIt);
 }
예제 #2
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);
                }
            }
        }
예제 #3
0
 public Listener(GoFree goFree)
 {
     _goFree = goFree;
 }