/// <summary> /// Starten des Servers /// </summary> public void Start(string strIPAdress, int Port) { //Endpoint und Listener bestimmen m_endpoint = new IPEndPoint(IPAddress.Parse(strIPAdress), Port); m_tcpip = new TcpListener(m_endpoint); if (m_tcpip == null) { return; } try { m_tcpip.Start(); // Haupt-TCPServer-Thread initialisieren und starten m_ThreadMainServer = new Thread(new ThreadStart(Run)); m_ThreadMainServer.Start(); //State setzen this.m_State = ListenerState.Started; } catch (Exception ex) { //Beenden m_tcpip.Stop(); this.m_State = ListenerState.Error; //Exception werfen throw ex; } }
private void transitionToVerified() { listenerStatus = ListenerState.VERIFIED; Debug.Log("verified"); InvokeRepeating("pollPayPalExecutePaymentAPI", 0f, listeningInterval); }
public IRCClient() { initEvent = new ManualResetEvent(false); tcp = new TcpClient(AddressFamily.InterNetwork); State = ListenerState.Stoped; }
public void Start() { using (var database = new RozmawiatorDb()) { var server = database.Servers.Find(_serverGuid); if (server == null) { server = new Database.Entities.Server { Id = _serverGuid, }; database.Servers.Add(server); } server.IpAddress = "192.168.88.19"; server.Port = Configuration.Host.ListenPort; server.State = ServerState.Online; database.SaveChanges(); } Port = Configuration.Host.ListenPort; TimeoutSpan = Configuration.Client.Timeout; _listener = new UdpClient(Port); _clients.Clear(); _conversations.Clear(); State = ListenerState.Listening; Task.Factory.StartNew(ListenLoop); }
public void Init(uint maxConnetion = 500) { if (State != ListenerState.Idle) { return; } socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, port); //if (localEndPoint.AddressFamily == AddressFamily.InterNetworkV6) //{ // // 配置监听socket为 dual-mode (IPv4 & IPv6) // // 27 is equivalent to IPV6_V6ONLY socket option in the winsock snippet below, // _serverSock.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, false); // _serverSock.Bind(new IPEndPoint(IPAddress.IPv6Any, localEndPoint.Port)); //} //else //{ // _serverSock.Bind(localEndPoint); //} try { socket.Bind(iep); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } socket.Listen((int)maxConnetion); State = ListenerState.Loaded; }
public void Run() { Console.WriteLine("Runing IRCClient..."); State = ListenerState.Loading; tcp.ConnectAsync(Config.Host, Config.Port).Wait(); if (!tcp.Connected) { Console.WriteLine("Error connect to {0}:{1}", Config.Host, Config.Port); State = ListenerState.Error; return; } var stream = tcp.GetStream(); sr = new StreamReader(stream); sw = new StreamWriter(stream); sw.WriteLine("PASS oauth:{0}", Config.Token); sw.WriteLine("NICK {0}", Config.Login); sw.Flush(); Task.Run((Action)resiveLoop); Task.Run((Action)timerLoop); initEvent.WaitOne(); State = ListenerState.Run; Console.WriteLine("Listener ready"); }
private void Handler(object sender, MouseEventArgs args) { if (State == ListenerState.Normal) { State = ListenerState.Marked; } }
public void Stop() { using (var database = new RozmawiatorDb()) { var server = database.Servers.Find(_serverGuid); if (server != null) { server.State = ServerState.Offline; database.SaveChanges(); } } foreach (var conversation in _conversations.ToArray()) { conversation.Close(); } foreach (var client in _clients.ToArray()) { RemoveClient(client); } State = ListenerState.Idle; _listener.Close(); }
/// <summary> /// The function that triggers the event loop for client connections /// </summary> /// <param name="callMe"></param> /// <param name="ID"></param> public static void ServerAwaitingClientLoop(SocketState.callMe callMe, int ID) { int port = 11000; TcpListener listener = new TcpListener(IPAddress.Any, port); listener.Start(); ListenerState ls = new ListenerState(callMe, listener, ID); listener.BeginAcceptSocket(AcceptNewClient, ls); }
/// <summary> /// The function that continues the event loop for each new client connection /// </summary> /// <param name="ar"></param> public static void AcceptNewClient(IAsyncResult ar) { ListenerState ls = (ListenerState)ar.AsyncState; Socket socket = ls.listener.EndAcceptSocket(ar); SocketState ss = new SocketState(socket, ls._call, ls.ID); ss._call(ss); ls.ID++; ls.listener.BeginAcceptSocket(AcceptNewClient, ls); }
public bool Stop() { if (State != ListenerState.Runing) { return(true); } socket.Close(); State = ListenerState.Idle; return(true); }
public void StartAsync(ListeningScenario listening) { daemon = new HttpListener(); daemon.Prefixes.Add(listening.Prefix); daemon.Start(); var listenerState = new ListenerState(daemon, listening); daemon.BeginGetContext(Callback, listenerState); }
public void StartAsync(ListeningScenario listening) { NewDaemon(); daemon.Prefixes.Add(listening.Prefix); daemon.Start(); var listenerState = new ListenerState(daemon, listening); daemon.BeginGetContext(Callback, listenerState); }
public void Listen() { _listeningSocket = _socketFactory.CreateListeningSocket(); EndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, Constants.MulticastPort); var listenerState = new ListenerState(); _listeningSocket.BeginReceiveFrom(listenerState.Buffer, ref remoteEndpoint, OnReceive, listenerState); _stopped = false; _started = true; }
static void ClientListener(ref ListenerState state) { TcpListener server = new TcpListener(iPAddress, DesktopPort); server.Start(); while (true) { state = ListenerState.Waiting; TcpClient client = server.AcceptTcpClient(); NetworkStream stream = client.GetStream(); //SslStream ssl = new SslStream(client.GetStream(), false); //ssl.AuthenticateAsServer(X509, false, true); state = ListenerState.UsernameSub; while (client.Available < 3) { if (state == ListenerState.Quiting) { break; } } if (state == ListenerState.Quiting) { server.Stop(); break; } Message message = MessageHelpers.GetMessage(stream); if (message.MessageType == MessageType.Initionalize && clients.Any(x => x.Value.Name == message.Name) == false) { ClientInfo c = new ClientInfo(message.Name, stream, ClientType.Desktop); clients.Add(c.GUID, c); ThreadPool.QueueUserWorkItem(HandleClientDesktopWorker, c); state = ListenerState.Connected; } else { state = ListenerState.Disconnected; Message h = new Message(message.Name, MessageType.Status); h.SetStatusType(StatusType.ErrorDisconnect); h.SetContent("User with the name " + message.Name + " already exists"); MessageHelpers.SetMessage(stream, h); stream.Close(); stream.Dispose(); client.Close(); client.Dispose(); } } }
public MouseListenerData(UIElement el) { State = ListenerState.Marked; _target = el; _target.PreviewMouseLeftButtonDown += Handler; _target.PreviewMouseLeftButtonUp += Handler; _target.PreviewMouseMove += Handler; _target.PreviewMouseRightButtonDown += Handler; _target.PreviewMouseRightButtonUp += Handler; _target.PreviewMouseWheel += Handler; _target.PreviewMouseDown += Handler; _target.PreviewMouseUp += Handler; }
public StylusListenerData(UIElement el) { State = ListenerState.Marked; _target = el; _target.PreviewStylusButtonDown += Handler; _target.PreviewStylusButtonUp += Handler; _target.PreviewStylusDown += Handler; _target.PreviewStylusInAirMove += Handler; _target.PreviewStylusInRange += Handler; _target.PreviewStylusMove += Handler; _target.PreviewStylusOutOfRange += Handler; _target.PreviewStylusSystemGesture += Handler; _target.PreviewStylusUp += Handler; }
public BilibiliListener() { Trace.TraceInformation("BilibiliListener: Create bilibili comments listener."); var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config/bilibili.config"); State = ListenerState.Disconnected; try { var json = JToken.Parse(File.ReadAllText(path)); LiveRoomID = json["roomid"].ToObject <int>(); } catch (Exception exc) { Trace.TraceError("BilibiliListener: Failed to load config from " + path); Trace.TraceError(exc.Message); Trace.TraceError(exc.StackTrace); } }
public void Stop() { try { if (m_ThreadMainServer != null) { // Haupt-TCPServer-Thread stoppen m_ThreadMainServer.Abort(); System.Threading.Thread.Sleep(100); } // Alle TCPServer-Threads stoppen for (IEnumerator en = m_threads.GetEnumerator(); en.MoveNext();) { //Nächsten TCPServer-Thread holen ServerThread st = (ServerThread)en.Current; //und stoppen st.Stop(); //Event abschicken if (ClientDisconnected != null) { ClientDisconnected(st, "Verbindung wurde beendet"); } } if (m_tcpip != null) { //Listener stoppen m_tcpip.Stop(); m_tcpip.Server.Close(); } //Liste leeren m_threads.Clear(); //Status vermerken this.m_State = ListenerState.Stopped; } catch (Exception) { this.m_State = ListenerState.Error; } }
/// <summary> /// 开始监听 /// </summary> /// <returns></returns> public void Start(SocketAsyncEventArgs acceptEventArgs = null) { if (State != ListenerState.Loaded) { Init(); } if (acceptEventArgs == null) { acceptEventArgs = new SocketAsyncEventArgs(); acceptEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(e_Completed); } else { acceptEventArgs.AcceptSocket = null; //释放上次绑定的Socket,等待下一个Socket连接 } bool willRaiseEvent = socket.AcceptAsync(acceptEventArgs); if (!willRaiseEvent) { Start(); } State = ListenerState.Runing; }
private void transitionToFailure() { listenerStatus = ListenerState.FAILURE; CancelInvoke("pollPayPalExecutePaymentAPI"); }
private void transitionToSuccess() { listenerStatus = ListenerState.SUCCESS; CancelInvoke("pollPayPalExecutePaymentAPI"); }
/// <summary> /// Beenden des Servers /// </summary> public void Stop() { try { if (m_ThreadMainServer != null) { // Haupt-TCPServer-Thread stoppen m_ThreadMainServer.Abort(); System.Threading.Thread.Sleep(100); } // Alle TCPServer-Threads stoppen for (IEnumerator en = m_threads.GetEnumerator(); en.MoveNext(); ) { //Nächsten TCPServer-Thread holen ServerThread st = (ServerThread)en.Current; //und stoppen st.Stop(); //Event abschicken if (ClientDisconnected != null) { ClientDisconnected(st, "Verbindung wurde beendet"); } } if (m_tcpip != null) { //Listener stoppen m_tcpip.Stop(); m_tcpip.Server.Close(); } //Liste leeren m_threads.Clear(); //Status vermerken this.m_State = ListenerState.Stopped; } catch (Exception) { this.m_State = ListenerState.Error; } }
/// <summary> /// 启动服务器 /// </summary> /// <param name="Port">监听端口号</param> public void Start(int Port) { //Endpoint und Listener bestimmen m_endpoint = new IPEndPoint(IPAddress.Any, Port); m_tcpip = new TcpListener(m_endpoint); if (m_tcpip == null) return; try { m_tcpip.Start(); // Haupt-TCPServer-Thread initialisieren und starten m_ThreadMainServer = new Thread(new ThreadStart(Run)); m_ThreadMainServer.Start(); //State setzen this.m_State = ListenerState.Started; } catch (Exception ex) { //Beenden m_tcpip.Stop(); this.m_State = ListenerState.Error; //Exception werfen throw ex; } }
public TcpListener(int port) { State = ListenerState.Idle; socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); this.port = port; }
static void Main(string[] args) { clients = new Dictionary <string, ClientInfo>(); Rooms = new Dictionary <string, Room>(); Room m = new Room("Main", 0); Rooms[m.GUID] = m; m = new Room("Extra", 1); Rooms[m.GUID] = m; #region Config loading code Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Loading Configuration..."); XmlDocument settings = new XmlDocument(); settings.Load("config.xml"); XmlNode roomsNode = settings.SelectSingleNode("Config/Rooms"); XmlNodeList rooms = roomsNode.SelectNodes("Room"); Console.ForegroundColor = ConsoleColor.DarkCyan; if (roomsNode.Attributes[0].InnerText == "true") { Console.WriteLine("Overriden Default Room(s)"); Rooms = new Dictionary <string, Room>(); } foreach (XmlNode node in rooms) { try { XmlAttributeCollection attr = node.Attributes; Console.WriteLine("Generating Room " + node.InnerText); m = new Room(node.InnerText, int.Parse(attr[0].InnerText), int.Parse(attr[1].InnerText), int.Parse(attr[2].InnerText)); Rooms[m.GUID] = m; } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to Generate Room " + node.InnerText); Console.ForegroundColor = ConsoleColor.DarkCyan; } } string webPort = settings.SelectSingleNode("Config/GeneralSettings/WebPort").InnerText; if (webPort != "") { if (!int.TryParse(webPort, out WebPort)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read WebPort, reverting to default port (8911)"); } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Set WebPort to " + WebPort); } } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("WebPort set to default (8911)"); } string desktopPort = settings.SelectSingleNode("Config/GeneralSettings/DesktopPort").InnerText; if (desktopPort != "") { if (!int.TryParse(desktopPort, out DesktopPort)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read DesktopPort, reverting to default port (8910)"); } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Set DesktopPort to " + DesktopPort); } } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("DesktopPort set to default (8910)"); } string ip = settings.SelectSingleNode("Config/GeneralSettings/ServerIp").InnerText; if (ip != "") { if (!IPAddress.TryParse(ip, out iPAddress)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read ServerIp, reverting to default (Automatic " + GetLocalIPAddress() + ")"); iPAddress = IPAddress.Parse(GetLocalIPAddress()); } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Set ServerIp to " + iPAddress.ToString()); } } else { Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("Automaticly setting ip to " + GetLocalIPAddress()); iPAddress = IPAddress.Parse(GetLocalIPAddress()); } try { if (!bool.TryParse(settings.SelectSingleNode("Config/GeneralSettings/WebPort").Attributes[0].InnerText, out WebActive)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read WebPort active attribute"); } if (!bool.TryParse(settings.SelectSingleNode("Config/GeneralSettings/DesktopPort").Attributes[0].InnerText, out DesktopActive)) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read WebPort active attribute"); } } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to read active states"); } string sslPath = settings.SelectSingleNode("Config/GeneralSettings/PfxCertificate").InnerText; if (sslPath != "") { try { X509 = new X509Certificate2(sslPath, settings.SelectSingleNode("Config/GeneralSettings/PfxCertificate").Attributes[0].InnerText); Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Loaded Pfx Certificate, starting ssl"); } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Failed to load Pfx Certificate, reverting to non-ssl"); } } else { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("No Pfx Certificate provided, reverting to non-ssl"); } if (Rooms.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[Server not started] Please add atleast one room to the server or set overrideDefault to false. Press enter to quit."); Console.ReadLine(); return; } if (!DesktopActive && !WebActive) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("[Server not started] Please set atleast one server to active (Web or Desktop). Press enter to quit."); Console.ReadLine(); return; } Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Complete!"); #endregion Bots = new List <dynamic>(); handler = new BotHandler(); handler.OnReqestClients += () => { return(clients); }; handler.OnUpdateClient += (c) => { clients[c.GUID] = c; }; handler.OnUpdateRoom += (r) => { Rooms[r.GUID] = r; }; startup = DateTime.UtcNow; #region Bot Loader Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Loading Bots..."); foreach (string dll in Directory.GetDirectories(@"Bots")) { string path = Directory.GetParent(dll).FullName; path = path + @"\" + new DirectoryInfo(dll).Name + @"\" + new DirectoryInfo(dll).Name + ".dll"; if (!File.Exists(path)) { continue; } if (!File.Exists(path.Replace(".dll", ".pdb"))) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("No .pdb file found for \n" + path); Console.WriteLine("Exact location of error is impossible to determine"); Console.ForegroundColor = ConsoleColor.White; } Assembly DLL = Assembly.LoadFrom(path); Type[] types = DLL.GetExportedTypes(); foreach (Type type in types) { Bot bot = (Bot)Attribute.GetCustomAttribute(type, typeof(Bot)); if (bot != null) { Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine($"{bot.Name} By {bot.Creator}"); Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine(bot.Desc); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine($"Version: {bot.Version}"); Console.ForegroundColor = ConsoleColor.White; dynamic c = Activator.CreateInstance(type); try { try { c.Init(handler); Bots.Add(c); } catch (RuntimeBinderException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Failed to load " + path); Console.WriteLine("(" + e.Message + ") thrown in " + e.TargetSite.Name + " at line " + GetLineNumber(e)); Console.ForegroundColor = ConsoleColor.White; continue; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Failed to load " + path); Console.WriteLine("(" + e.Message + ") thrown in " + e.TargetSite.Name + " at line " + GetLineNumber(e)); Console.ForegroundColor = ConsoleColor.White; continue; } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Sucessfully loaded!"); Console.ForegroundColor = ConsoleColor.White; } catch (Exception e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Failed to load " + path); Console.WriteLine("Method Init Missing or Incorrect or other error has occured"); Console.WriteLine("(" + e.Message + ") thrown in " + e.TargetSite.Name + " at line " + GetLineNumber(e)); Console.ForegroundColor = ConsoleColor.White; continue; } } else { Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine("Failed to load " + path); Console.WriteLine("File doesnt contain Bot Attribute/Code"); Console.ForegroundColor = ConsoleColor.White; } } } Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("Complete!"); Console.ForegroundColor = ConsoleColor.White; #endregion ListenerState WebState = ListenerState.Waiting; ListenerState DesktopState = ListenerState.Waiting; web = new Thread(() => WebListener(ref WebState)) { IsBackground = true }; desktop = new Thread(() => ClientListener(ref DesktopState)) { IsBackground = true }; if (WebActive) { web.Start(); } if (DesktopActive) { desktop.Start(); } string json = Rooms.SerializeRooms(); Rooms = json.DeserializeRooms(); Console.WriteLine("Type quit to stop server or help for a list of commands"); while (true) { string[] command = Console.ReadLine().Split(' '); if (command[0] == "quit") { break; } else if (command[0] == "log") { if (command[1] == "users") { Console.WriteLine("Users:"); foreach (KeyValuePair <string, ClientInfo> client in clients) { Console.WriteLine(client.ToString()); } } else if (command[1] == "threads") { Console.WriteLine("Web: "); Console.WriteLine("State -> " + WebState.ToString()); Console.WriteLine("Status -> " + web.ThreadState.ToString()); Console.WriteLine("Desktop: "); Console.WriteLine("State -> " + DesktopState.ToString()); Console.WriteLine("Status -> " + desktop.ThreadState.ToString()); } if (command[1] == "rooms") { Console.WriteLine("Rooms:"); foreach (KeyValuePair <string, Room> room in Rooms) { Console.WriteLine(room.Value.ToString()); } } } else if (command[0] == "restart") { if (command[1] == "web") { WebState = ListenerState.Quiting; while (web.IsAlive) { ; } WebState = ListenerState.Waiting; web = new Thread(() => WebListener(ref WebState)) { IsBackground = true }; web.Start(); Console.WriteLine("Web Restarted"); } else if (command[1] == "desktop") { DesktopState = ListenerState.Quiting; while (desktop.IsAlive) { ; } DesktopState = ListenerState.Waiting; desktop = new Thread(() => ClientListener(ref DesktopState)) { IsBackground = true }; desktop.Start(); Console.WriteLine("Desktop Restarted"); } else if (command[1] == "both") { WebState = ListenerState.Quiting; while (web.IsAlive) { ; } WebState = ListenerState.Waiting; web = new Thread(() => WebListener(ref WebState)) { IsBackground = true }; web.Start(); Console.WriteLine("Web Restarted"); DesktopState = ListenerState.Quiting; while (desktop.IsAlive) { ; } DesktopState = ListenerState.Waiting; desktop = new Thread(() => ClientListener(ref DesktopState)) { IsBackground = true }; desktop.Start(); Console.WriteLine("Desktop Restarted"); } } else if (command[0] == "help") { Console.WriteLine("Coming soon"); } } }
public void LoopListening(ref bool StopListenToken) { // Get Room ID. var txt = HttpRequests.DownloadString(@"https://api.live.bilibili.com/room/v1/Room/room_init?id=" + LiveRoomID).Result; var jobj = JToken.Parse(txt); var id = jobj["data"]["room_id"].ToObject <int>(); // Get Room token. txt = HttpRequests.DownloadString(@"https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=" + LiveRoomID).Result; jobj = JToken.Parse(txt); var token = jobj["data"]["token"].ToString(); using (var ws = new WebSocketSharp.WebSocket("wss://broadcastlv.chat.bilibili.com/sub")) { State = ListenerState.Connecting; ws.Connect(); // Initialize var package = PackageBuilder.MakeAuthPackage(0, id, token); Trace.TraceWarning($"BilibiliListener: Connecting:{id}..."); ws.OnMessage += Ws_OnMessage; var bytes = package.ToByteArray(); ws.Send(bytes); // When the connection is not bad, default action. // Reconnect to the live room and resend the auto package. OnBadCommunication += c => { c.Close(); Thread.Sleep(1000); c.Connect(); var counter = 3; while (counter-- > 0) { if (c.ReadyState == WebSocketSharp.WebSocketState.Open) { var p = PackageBuilder.MakeAuthPackage(0, id, token); c.Send(p.ToByteArray()); LastSendHeartBeatTime = DateTime.Now; State = ListenerState.Connected; Trace.TraceWarning("BilibiliListener: Reconnected."); return; } else { Trace.TraceWarning("BilibiliListener: Retry after 3 seconds."); Thread.Sleep(3000); } } }; // Main loop while (!StopListenToken) { Thread.Sleep(1000); if (ws.ReadyState == WebSocketSharp.WebSocketState.Open && DateTime.Now.Subtract(LastSendHeartBeatTime).TotalMilliseconds >= HeartBeatDuration) { var heartbeat = PackageBuilder.MakeHeatBeat(); ws.Send(heartbeat.ToByteArray()); LastSendHeartBeatTime = DateTime.Now; waitBack = true; } if (waitBack && DateTime.Now.Subtract(LastSendHeartBeatTime).TotalMilliseconds >= HeartBeatTimeout) { State = ListenerState.BadCommunication; Trace.TraceWarning("BilibiliListener: Bad communication, retrying."); OnBadCommunication?.Invoke(ws); } } ws.Close(); State = ListenerState.Disconnected; } }
private void ChangeState(ListenerState newState) { // Check that only allowed state changes are made switch (State) { case ListenerState.uninitialized: if (!(newState == ListenerState.initializing || newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Uninitialized->" + newState.ToString()); } break; case ListenerState.initializing: if (!(newState == ListenerState.initialized || newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Initializing->" + newState.ToString()); } break; case ListenerState.initialized: if (!(newState == ListenerState.starting || newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Initialized->" + newState.ToString()); } break; case ListenerState.starting: if (!(newState == ListenerState.started || newState == ListenerState.stopping || newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Starting->" + newState.ToString()); } break; case ListenerState.started: if (!(newState == ListenerState.stopping || newState == ListenerState.faulted || newState == ListenerState.starting)) { throw new Exception("Invalid state change. Started->" + newState.ToString()); } break; case ListenerState.stopping: if (!(newState == ListenerState.stopped || newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Stopping->" + newState.ToString()); } break; case ListenerState.stopped: if (!(newState == ListenerState.faulted)) { throw new Exception("Invalid state change. Stopped->" + newState.ToString()); } break; default: throw new Exception("Invalid state change"); } // Raise event switch (newState) { case ListenerState.initializing: if (OnInitializing != null) { OnInitializing.Invoke(); } break; case ListenerState.initialized: if (OnInitialized != null) { OnInitialized.Invoke(); } break; case ListenerState.starting: if (OnStarting != null) { OnStarting.Invoke(); } break; case ListenerState.started: if (OnStarted != null) { OnStarted.Invoke(); } break; case ListenerState.stopping: if (OnStopping != null) { OnStopping.Invoke(); } break; case ListenerState.stopped: if (OnStopped != null) { OnStopped.Invoke(); } break; case ListenerState.faulted: if (OnFaulted != null) { OnFaulted.Invoke(); } break; } State = newState; }
public bool SpinWaitForState(ListenerState desired, Func<ListenerState, bool> action) { return _state.TrySpinWaitForState(desired, action); }
// Use this for initialization public void StartListening() { listenerStatus = ListenerState.LISTENING; InvokeRepeating("pollPayPalShowPaymentAPI", 0f, listeningInterval); }
static void WebListener(ref ListenerState state) { TcpListener server = new TcpListener(iPAddress, WebPort); server.Start(); while (true) { state = ListenerState.Waiting; TcpClient client = server.AcceptTcpClient(); state = ListenerState.Accepting; //SslStream stream = new SslStream(client.GetStream(), true); //stream.AuthenticateAsServer(X509, false, SslProtocols.Default, true); while (client.Available < 3) { if (state == ListenerState.Quiting) { break; } } if (state == ListenerState.Quiting) { server.Stop(); break; } state = ListenerState.Handshaking; //JsonMessageHelpers.HandleHandshake(client.GetStream(), client.Available); NetworkStream stream = client.GetStream(); JsonMessageHelpers.HandleHandshake(stream); state = ListenerState.UsernameSub; while (client.Available < 3) { if (state == ListenerState.Quiting) { break; } } if (state == ListenerState.Quiting) { server.Stop(); break; } JsonMessage json = JsonMessageHelpers.GetJsonMessage(stream); if (json.MessageType == MessageType.Initionalize && clients.Any(x => x.Value.Name == json.Name) == false) { ClientInfo c = new ClientInfo(json.Name, stream, ClientType.Web); clients.Add(c.GUID, c); ThreadPool.QueueUserWorkItem(HandleClientWebWorker, new object[2] { client, c }); state = ListenerState.Connected; } else { JsonMessage h = new JsonMessage(json.Name, MessageType.Status); h.SetStatusType(StatusType.ErrorDisconnect); h.SetContent("User with the name " + json.Name + " already exsists"); JsonMessageHelpers.SetJsonMessage(stream, h); stream.Close(); stream.Dispose(); client.Close(); client.Dispose(); state = ListenerState.Disconnected; } } }
private static void HandleCommand(DriverState state) { var parts = Encoding.ASCII.GetString(state.receiveBuffer, 0, state.receivedBytes).Split(' '); var cmd = parts[0]; if (cmd == "LISTEN") { Console.WriteLine("Creating listening port " + parts[1]); var port = int.Parse(parts[1]); var newListeningPort = new TcpListener(IPAddress.Any, port); newListeningPort.Start(); var acceptState = new ListenerState { listener = newListeningPort, driver = state, port = port }; state.listeningPorts.Add(acceptState.port, acceptState); StartReceiveCommand(state); } else if (cmd == "STOP_LISTEN") { Console.WriteLine("Stopping listening port " + parts[1]); var port = int.Parse(parts[1]); var listenerState = state.listeningPorts[port]; listenerState.listener.Stop(); state.listeningPorts.Remove(port); StartReceiveCommand(state); } else if (cmd == "CLOSE_CONNECTION") { Console.WriteLine("Closing connection " + parts[1]); var connectionId = int.Parse(parts[1]); var connectionState = state.connections[connectionId]; connectionState.socket.Shutdown(SocketShutdown.Both); connectionState.socket.Close(); state.connections.Remove(connectionId); StartReceiveCommand(state); } else if (cmd == "ACCEPT_ONE") { Console.WriteLine("Accepting one connection on port " + parts[1]); var port = int.Parse(parts[1]); var listenerState = state.listeningPorts[port]; listenerState.listener.BeginAcceptSocket(new AsyncCallback(OnAcceptSocketOnce), listenerState); StartReceiveCommand(state); } else if (cmd == "ACCEPT_ALL") { Console.WriteLine("Accepting all connections on port " + parts[1]); var port = int.Parse(parts[1]); var listenerState = state.listeningPorts[port]; listenerState.listener.BeginAcceptSocket(new AsyncCallback(OnAcceptSocket), listenerState); StartReceiveCommand(state); } else if (cmd == "SEND") { Console.WriteLine("Sending " + parts[2] + " bytes to " + parts[1]); var connectionId = int.Parse(parts[1]); var messageLength = int.Parse(parts[2]); var payloadState = new SendPayloadState { bytesToReceive = messageLength, target = state.connections[connectionId] }; state.socket.BeginReceive(state.receiveBuffer, 0, Math.Min(payloadState.bytesToReceive, state.receiveBuffer.Length), SocketFlags.None, new AsyncCallback(OnPayloadReceived), payloadState); } else if (cmd == "READ_ONCE") { Console.WriteLine("Reading once (max " + parts[2] + " bytes) from " + parts[1]); var connectionId = int.Parse(parts[1]); var maxBytes = int.Parse(parts[2]); var connectionState = state.connections[connectionId]; if (maxBytes == 0) { maxBytes = connectionState.receiveBuffer.Length; } connectionState.socket.BeginReceive(connectionState.receiveBuffer, 0, maxBytes, SocketFlags.None, new AsyncCallback(OnReceiveClientDataOnce), connectionState); StartReceiveCommand(state); } else if (cmd == "READ_ALL") { Console.WriteLine("Reading all from " + parts[1]); var connectionId = int.Parse(parts[1]); var connectionState = state.connections[connectionId]; connectionState.socket.BeginReceive(connectionState.receiveBuffer, 0, connectionState.receiveBuffer.Length, SocketFlags.None, new AsyncCallback(OnReceiveClientData), connectionState); StartReceiveCommand(state); } else { Console.WriteLine("Unknown command: " + string.Join(" ", parts)); } }
private void OnReceive(IAsyncResult ar) { try { if (_listeningSocket != null) { EndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, Constants.MulticastPort); var bytesReceived = _listeningSocket.EndReceiveFrom(ar, ref remoteEndpoint); var listenerState = (ListenerState)ar.AsyncState; var requestString = Encoding.ASCII.GetString(listenerState.Buffer, 0, bytesReceived); var message = _messageParser.Parse(requestString); if (message.MessageLine.StartsWith(Constants.NotifyMessage)) { Task.Run(() => { var dev = _deviceInfoCollector.Collect(message); DeviceDiscovered?.Invoke(this, dev); }); } else if (message.MessageLine.StartsWith(Constants.SearchMessage)) { SearchMessageReceived?.Invoke(this, message); var responseString = _responseFactory.CreateResponse(requestString); if (responseString != null) { var responseBuffer = Encoding.ASCII.GetBytes(responseString); _listeningSocket.SendTo(responseBuffer, remoteEndpoint); } } // enter new listening loop listenerState = new ListenerState(); _listeningSocket.BeginReceiveFrom(listenerState.Buffer, ref remoteEndpoint, OnReceive, listenerState); } } catch (ObjectDisposedException) { } catch (Exception e) { _log.Error(e); if (_started && !_stopped) { // stop and start listening again because there was an error Stop(); Listen(); } } }
public void ChangeState(ListenerState state) { }