using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Firebase.Database;
using Firebase.Database.Query;
class TcpIpMultiChattingServer
{
static TcpListener listener;
static List<NetworkStream> clients = new List<NetworkStream>();
static FirebaseClient firebaseClient;
public static void Main()
{
// Firebase 초기화
firebaseClient = new FirebaseClient("https://your-database-name.firebaseio.com/");
listener = new TcpListener(IPAddress.Any, 7777);
listener.Start();
Console.WriteLine("서버가 시작되었습니다.");
while (true)
{
TcpClient client = listener.AcceptTcpClient();
NetworkStream stream = client.GetStream();
clients.Add(stream);
Console.WriteLine("새 클라이언트가 접속했습니다.");
Thread clientThread = new Thread(HandleClient);
clientThread.Start(stream);
}
}
static async void HandleClient(object obj)
{
NetworkStream stream = (NetworkStream)obj;
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream) { AutoFlush = true };
string clientName = await reader.ReadLineAsync();
await BroadcastMessageAsync($"#{clientName}님이 입장했습니다.");
while (true)
{
try
{
string message = await reader.ReadLineAsync();
if (message == null) break;
await BroadcastMessageAsync(message);
}
catch
{
break;
}
}
clients.Remove(stream);
await BroadcastMessageAsync($"#{clientName}님이 퇴장했습니다.");
stream.Close();
}
static async Systehttp://m.Threading.Tasks.Task BroadcastMessageAsync(string message)
{
await firebaseClient
.Child("messages")
.PostAsync(new { Message = message });
foreach (var client in clients)
{
StreamWriter writer = new StreamWriter(client) { AutoFlush = true };
await writer.WriteLineAsync(message);
}
}
}