Beispiel #1
0
        private void ParseRequest(ChatHelper.StateObject state, Socket handlerSocket)
        {
            var data = new Data(state.Buffer);

            if (data.Command == Command.Disconnect)
            {
                DisconnectClient(state.WorkSocket);
                return;
            }
            var clientStr = clients.FirstOrDefault(cl => cl.Key == data.To).Value;

            if (clientStr?.Connection == null)
            {
                return;
            }

            try
            {
                clientStr.Connection.Send(data.ToByte());
                logs.Enqueue(data);
                SendSuccess(state.WorkSocket);
            }
            catch (Exception ex)
            {
                SendFail(state.WorkSocket, ex);
            }
            handlerSocket.BeginReceive(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, 0,
                                       OnReceive, state);
        }
Beispiel #2
0
        /// <summary>
        /// When new client is added
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ClientAdded(object sender, EventArgs e)
        {
            var socket    = ((CustomEventArgs)e).ClientSocket;
            var bytes     = new byte[1024];
            var bytesRead = socket.Receive(bytes);

            var newUserName = Encoding.Unicode.GetString(bytes, 0, bytesRead);

            if (clients.Any(client => client.UserName == newUserName))
            {
                SendNameAlreadyExist(socket, newUserName);
                return;
            }

            var newClient = new ConnectedClient(newUserName, socket);

            clients.Add(newClient);

            OnClientConnected(socket, newUserName);

            foreach (var client in clients)
            {
                SendUsersList(client.Connection, client.UserName, newUserName, ChatHelper.CONNECTED);
            }

            var state = new ChatHelper.StateObject
            {
                WorkSocket = socket
            };

            socket.BeginReceive(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, 0,
                                OnReceive, state);

            ChatHelper.WriteToEventLog(Log.ClientConnected, EventLogEntryType.Information);
        }
        /// <summary>
        /// When new client is added
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public async void ClientAdded(object sender, EventArgs e)
        {
            var socket = ((CustomEventArgs)e).ClientSocket;

            var clientReader = new DataReader(socket.InputStream);

            clientReader.InputStreamOptions = InputStreamOptions.Partial;

            string clientName;

            while (true)
            {
                uint sizeFieldCount = await clientReader.LoadAsync(sizeof(uint));

                if (sizeFieldCount != sizeof(uint))
                {
                    // The underlying socket was closed before we were able to read the whole data.
                    return;
                }
                uint bytesLength       = clientReader.ReadUInt32();
                uint actualBytesLength = await clientReader.LoadAsync(bytesLength);

                if (bytesLength != actualBytesLength)
                {
                    // The underlying socket was closed before we were able to read the whole data.
                    return;
                }
                var buffer = new byte[bytesLength];
                clientReader.ReadBytes(buffer);
                clientName = Encoding.Unicode.GetString(buffer);

                var newClient = new ConnectedClient(clientName, socket);
                clients.Add(newClient);
                break;
            }

            OnClientConnected(socket, clientName);

            foreach (var client in clients)
            {
                SendUsersList(client.Connection, client.UserName, clientName, ChatHelper.CONNECTED);
            }

            var state = new ChatHelper.StateObject
            {
                InputStream = socket.InputStream
            };

            var dataReader = new DataReader(socket.InputStream);


            var buff = new byte[dataReader.UnconsumedBufferLength];

            dataReader.ReadBytes(buff);

            //ChatHelper.WriteToEventLog(Log.ClientConnected, EventLogEntryType.Information);
        }
Beispiel #4
0
        public void ClientAdded(object sender, EventArgs e)
        {
            var socket    = ((CustomEventArgs)e).ClientSocket;
            var bytes     = new byte[1024];
            var bytesRead = socket.Receive(bytes);

            var newUserName = Encoding.Unicode.GetString(bytes, 0, bytesRead);

            if (clients.Any(client => client.Key == newUserName))
            {
                SendNameAlreadyExist(socket, newUserName);
                return;
            }

            var newClient = new ConnectedClient(newUserName, socket);
            var state     = new ChatHelper.StateObject
            {
                WorkSocket = socket
            };

            if (clients.TryAdd(newClient.UserName, newClient))
            {
                OnClientConnected(socket, newUserName);

                foreach (var client in clients)
                {
                    SendUsersList(client.Value.Connection, client.Key, newUserName, ChatHelper.CONNECTED);
                }
                SendSuccess(state.WorkSocket);
            }

            else
            {
                SendFail(state.WorkSocket, new Exception("add client error"));
            }
            //
            var newBytes = new byte[ChatHelper.StateObject.BUFFER_SIZE];

            try
            {
                int byteRead = socket.Receive(newBytes);
                if (byteRead <= 0)
                {
                    return;
                }
                ParseRequestSync(newBytes, socket);
            }
            catch (Exception ex)
            {
                JournalAdd($"TCP соединение закрыто", new ErrorEventArgs(ex));
                DisconnectClient(socket);
            }

            //socket.BeginReceive(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, 0,
            //OnReceive, state);
        }
Beispiel #5
0
 private void ReceiveUdpData()
 {
     try
     {
         var state = new ChatHelper.StateObject {
             WorkSocket = clientSocket
         };
         var ep = remoteEndPoint as EndPoint;
         clientSocket.BeginReceiveFrom(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, SocketFlags.None, ref ep,
                                       OnUdpRecieve, state);
     }
     catch (Exception)
     {
         udpConnectionActive = false;
     }
 }
Beispiel #6
0
        private void RecieveFromServer()
        {
            var state = new ChatHelper.StateObject
            {
                WorkSocket = server.Client
            };

            while (IsConnected)
            {
                if (IsReceivingData)
                {
                    continue;
                }
                IsReceivingData = true;
                server.Client.BeginReceive(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, 0,
                                           OnReceive, state);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Parse client request
        /// </summary>
        /// <param name="state"></param>
        /// <param name="handlerSocket"></param>
        private void ParseRequest(ChatHelper.StateObject state, Socket handlerSocket)
        {
            var data = new Data(state.Buffer);

            if (data.Command == Command.Disconnect)
            {
                DisconnectClient(state.WorkSocket);
                return;
            }
            var clientStr = clients.FirstOrDefault(cl => cl.UserName == data.To);

            if (clientStr == null)
            {
                return;
            }
            clientStr.Connection.Send(data.ToByte());
            handlerSocket.BeginReceive(state.Buffer, 0, ChatHelper.StateObject.BUFFER_SIZE, 0,
                                       OnReceive, state);
        }
        /// <summary>
        /// Parse client request
        /// </summary>
        /// <param name="state"></param>
        /// <param name="handlerSocket"></param>
        private void ParseRequest(ChatHelper.StateObject state, StreamSocket handlerSocket)
        {
            var data = new Data(state.Buffer);

            if (data.Command == Command.Disconnect)
            {
                DisconnectClient(handlerSocket);
                return;
            }

            var clientStr = clients.FirstOrDefault(cl => cl.UserName == data.To);

            if (clientStr == null)
            {
                return;
            }

            var writer = new DataWriter(clientStr.Connection.OutputStream);

            writer.WriteBytes(data.ToByte());
        }