private void ReceiveServerMessages() { // show all new messages while (server.GetNextMessage(out Telepathy.Message msg)) { switch (msg.eventType) { case Telepathy.EventType.Connected: Debug.Log($"client {msg.connectionId} is Connected"); connectedClients.Add(msg.connectionId); SendNetworkMessageToClient(msg.connectionId, new SNetworkMessage(EMessageType.ConnectionSuccessful, msg.connectionId.ToString())); OnNewClient?.Invoke(msg.connectionId); break; case Telepathy.EventType.Disconnected: Debug.Log(msg.connectionId + " Disconnected"); connectedClients.Remove(msg.connectionId); break; case Telepathy.EventType.Data: SNetworkMessage netMsg = JsonUtility.FromJson <SNetworkMessage>(Encoding.UTF8.GetString(msg.data)); netMsg.clientID = msg.connectionId; //Debug.Log($"client({msg.connectionId}) has send a {netMsg.type} message."); SortServerMessages(netMsg); break; } } }
/// <summary> /// Spawn a thread that listens to incoming connections /// </summary> public void Start(OnNewClient onConnection, Action<Socket> beforeBindListeningSocket) { InitListenException = null; InitListenFinished.Reset(); IsListening = false; IsShuttingDown = false; OnClientStart = onConnection; BeforeBindListeningSocket = beforeBindListeningSocket; ListeningThread = new Thread(StartThread); ListeningThread.Name = "ListenTCP"; ListeningThread.IsBackground = true; ListeningThread.Start(); const int cleanTimeout = 300 * 1000; // in ms CleanTimer = new Timer(new TimerCallback(CheckSockets), null, cleanTimeout, cleanTimeout); }
public Syncronizer(NetworkPeer p, IEnumerable <object> ts) { peer = p; message_processor = new MessageProcessor(this, b => ReadBuffer(b)); entity_manager = new EntityManager(this); system_manager = new SystemManager(this, ts); constant_manager = new ConstantManager(this); if (GetNetworkActor().IsServer()) { peer.OnConnect += delegate(NetIncomingMessage message) { constant_manager.SendFullUpdate(new NetworkRecipient_Single(message.SenderConnection)); entity_manager.InitializeRecipient(new NetworkRecipient_Single(message.SenderConnection)); OnNewClient.InvokeAll(message.SenderConnection); return(true); }; } peer.OnData += delegate(NetIncomingMessage message) { return(message_processor.ProcessMessage(message)); }; }
private async void ListenCallback(IAsyncResult result) { // Recursive call to process another request using this same callback try { TcpListener.BeginAcceptTcpClient(ListenCallback, null); } catch (Exception) { if (IsStarted) { throw; //don't swallow too much! } return; } // Call End to complete the asynchronous operation. TcpClient tcpClient = TcpListener.EndAcceptTcpClient(result); NetworkStream stream = tcpClient.GetStream(); using (StreamReader streamReader = new StreamReader(stream, Encoding.ASCII, false, 500, true)) using (StreamWriter streamWriter = new StreamWriter(stream, Encoding.ASCII, 5000, true)) { string inputStr = await RequestHeadingParser.RetrieveHttpRequestHeadingFromStream(streamReader, 2500); LOGGER.Debug("Received request: {}", inputStr); var request = RequestHeadingParser.ParseHttpRequestHeading(inputStr); request.Headers.TryGetValue("Icy-Metadata", out string icyMetaData); if (!string.Equals(request.Verb, "GET", StringComparison.InvariantCultureIgnoreCase)) { await streamWriter.WriteAsync("HTTP 405 Method Not Allowed" + "\r\n"); } bool isIcy; // Checks if is a SHOUTCast client, or a normal HTTP client if (!string.IsNullOrEmpty(icyMetaData) && Convert.ToInt64(icyMetaData) > 0) { isIcy = true; await streamWriter.WriteAsync("ICY 200 OK" + "\r\n"); await streamWriter.WriteAsync("icy-metaint: " + Convert.ToString(RadioCaster.RadioInfo.MetadataInterval) + "\r\n"); } else { isIcy = false; await streamWriter.WriteAsync($"HTTP/{request.Version} 200 OK\r\n"); } await streamWriter.WriteAsync("Content-Type: audio/mpeg" + "\r\n"); // Begin body await streamWriter.WriteAsync("\r\n"); await streamWriter.FlushAsync(); var radioClient = isIcy ? (IRadioClient) new IcyRadioClient(stream, RadioCaster) : new RadioClient(stream); OnNewClient?.Invoke(this, new NewClientEventArgs(radioClient)); } }
/// <summary> /// Spawn a thread that listens to incoming connections /// </summary> public void Start(OnNewClient onConnection) { InitListenException = null; InitListenFinished.Reset(); IsListening = false; IsShuttingDown = false; OnClientStart = onConnection; ListeningThread = new Thread(StartThread); ListeningThread.Name = "ListenTCP"; ListeningThread.IsBackground = true; ListeningThread.Start(); const int cleanTimeout = 300 * 1000; // in ms CleanTimer = new Timer(new TimerCallback(CheckSockets), null, cleanTimeout, cleanTimeout); }
public TcpServerTest(OnNewClient apl, bool bUseIPv6) : base(port, bUseIPv6) { Start(apl); }