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); }
/// <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); }
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); }
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; } }
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); } }
/// <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()); }