void Disconnected(WsConnection sender, EventArgs e) { log.InfoFormat("Unattached socket disconnected, handle = {0}", sender._mySocket.Handle.ToString()); _unknown.Remove(sender); }
public void Disconnected(WsConnection sender, EventArgs e) { if (AgentDisconnected != null) { AgentDisconnected(this, EventArgs.Empty); } }
public void MessageReceived(WsConnection sender, MessageReceivedEventArgs e) { if (e.Message.Length >= 1) { if (e.Message[0] == '\u0003') { if (AgentDisconnected != null) { AgentDisconnected(this, EventArgs.Empty); } } else if (e.Message.Length > 1) { string s = e.Message.Substring(0, 1); int i = 0; if (int.TryParse(s, out i)) { WsClientConnection client = _clients[i]; if (client != null) { client.SendMessage(e.Message.Substring(2)); } } } } }
public WsClientConnection(WsConnection conn, WsAgentConnection agent, int id, string name) { _connection = conn; _agent = agent; _clientID = id; _name = name; }
public WsAgentConnection(WsConnection conn, string name) { _connection = conn; _name = name; // Initialize our client list _clients = new Dictionary <int, WsClientConnection>(); for (int i = 1; i <= 4; i++) { _clients.Add(i, null); } }
public void MessageReceived(WsConnection sender, MessageReceivedEventArgs e) { if (_agent != null && e.Message.Length > 0) { if (e.Message[0] == '\u0003') { if (ClientDisconnected != null) { ClientDisconnected(this, EventArgs.Empty); } } else { _agent.SendMessage(_clientID.ToString() + ": " + e.Message); } } }
private void OnConnect(IAsyncResult asyn) { // create a new socket for the connection Socket socket = _listener.EndAccept(asyn); // Perform the necessary handshaking PerformHandshake(socket); log.InfoFormat("New socket created, handle = {0}", socket.Handle.ToString()); // Create a WsConnection object for this connection WsConnection client = new WsConnection(socket); _unknown.Add(client); // Wire-up the event handlers client.MessageReceived += new MessageReceivedEventHandler(MessageReceived); client.Disconnected += new WsDisconnectedEventHandler(Disconnected); // Listen for more connections _listener.BeginAccept(new AsyncCallback(OnConnect), null); }
void MessageReceived(WsConnection sender, MessageReceivedEventArgs e) { string msg = e.Message; log.Debug("Message received: " + msg); if (e.DataLength > 14 && (msg.Substring(0, 14) == "[Agent SignOn:")) { // This is an agent signing on string name = msg.Substring(14, e.DataLength - 15); WsAgentConnection agent = new WsAgentConnection(sender, name); // Re-wire the event handlers sender.Disconnected -= Disconnected; sender.MessageReceived -= MessageReceived; sender.Disconnected += agent.Disconnected; sender.MessageReceived += agent.MessageReceived; agent.AgentDisconnected += new WsDisconnectedAgentEventHandler(AgentDisconnected); // Move this socket to the agent list _unknown.Remove(sender); _agents.Add(agent); log.InfoFormat("Socket attached to agent {0}, handle = {1}", name, sender._mySocket.Handle.ToString()); // Send a response agent.SendMessage("Welcome, " + name); } else if (e.DataLength > 15 && (msg.Substring(0, 15) == "[Client SignOn:")) { // This is a client requesting assistance string name = msg.Substring(15, e.DataLength - 16); // Find an agent WsAgentConnection agent = null; int clientID = 0; foreach (WsAgentConnection a in _agents) { foreach (KeyValuePair <int, WsClientConnection> d in a._clients) { if (d.Value == null) { agent = a; clientID = d.Key; break; } } if (agent != null) { break; } } if (agent != null) { WsClientConnection client = new WsClientConnection(sender, agent, clientID, name); log.InfoFormat("Client {0} assigned to agent {1}", name, agent._name); // Re-wire the event handlers sender.Disconnected -= Disconnected; sender.MessageReceived -= MessageReceived; sender.Disconnected += client.Disconnected; sender.MessageReceived += client.MessageReceived; client.ClientDisconnected += new WsDisconnectedClientEventHandler(ClientDisconnected); // Add this to the agent list _unknown.Remove(sender); _clients.Add(client); agent._clients[clientID] = client; // Send a message to the agent agent.SendMessage("[ClientName:" + clientID.ToString() + name + "]"); // Send a response client.SendMessage("Hello! My name is " + agent._name + ". How may I help you?"); } else { // There are no agents available sender.SendMessage("There are no agents currently available;" + "please try again later"); sender.Dispose(); } } }