コード例 #1
0
ファイル: Server.cs プロジェクト: Team-on/works
 void SendEveryone(ServerSideUser sender, string message)
 {
     foreach (var user in users)
     {
         Send(user.stream, sender == null ? ReceiverType.Server_Everyone : ReceiverType.Client_Everyone, message);
     }
 }
コード例 #2
0
ファイル: Server.cs プロジェクト: Team-on/works
        void ProcessClient(object o)
        {
            TcpClient client = o as TcpClient;

            if (client is null)
            {
                return;
            }
            NetworkStream stream = client.GetStream();

            byte[]        data;
            RecieveResult res;

            ServerSideUser currUser = new ServerSideUser()
            {
                user   = null,
                client = client,
                stream = stream,
                thread = Thread.CurrentThread
            };

            users.Add(currUser);

            bool isRunning = true;

            do
            {
                while (!stream.CanRead)
                {
                    Thread.Sleep(100);
                }

                res = Recieve(stream, out data);

                switch (res.receiverType)
                {
                case ReceiverType.Client_Server:
                    switch (res.commandType)
                    {
                    case CommandType.Connect:
                        currUser.user = ClientLib.User.Deserialize(data);
                        SendEveryone(null, currUser.user.Name + " has connected!");
                        break;

                    case CommandType.Exit:
                        isRunning = false;
                        users.Remove(currUser);
                        SendEveryone(null, currUser.user.Name + " has left!");
                        break;
                    }
                    break;

                case ReceiverType.Client_Everyone:
                    switch (res.commandType)
                    {
                    case CommandType.String:
                        SendEveryoneUserData(currUser.user);
                        SendEveryone(currUser, Encoding.UTF8.GetString(data, 0, data.Length));
                        break;

                    case CommandType.RawData:
                        break;
                    }
                    break;

                case ReceiverType.Client_GroupById:
                    switch (res.commandType)
                    {
                    default:
                        break;
                    }
                    break;
                }
            } while (isRunning);

            users.Remove(currUser);
            stream.Close();
            client.Close();
        }