private void parseObject(dataTypes objReceived) { if (objReceived.objectType.Equals(typeof(messageToEveryone).ToString())) { messageToEveryone msg = (messageToEveryone)objReceived.myObject; clientMW.appendText("[" + msg.whoAmI + "] " + msg.message); } else if (objReceived.objectType.Equals(typeof(userList).ToString())) { userList onlineClients = (userList)objReceived.myObject; clientMW.appendUsers(onlineClients.users); } else if (objReceived.objectType.Equals(typeof(startPrivate).ToString())) { startPrivate startPRV = (startPrivate)objReceived.myObject; clientMW.startPrivateConversationByServer(startPRV.whoStarts); } else if (objReceived.objectType.Equals(typeof(privateMessage).ToString())) { privateMessage prvMsg = (privateMessage)objReceived.myObject; clientMW.pushPrivateToWindow(prvMsg); } else if (objReceived.objectType.Equals(typeof(closePrivate).ToString())) { closePrivate closePrv = (closePrivate)objReceived.myObject; clientMW.closePrivate(closePrv); } else { throw new Exception("Unsupported object type"); } }
private void parseObject(dataTypes objReceived, Socket m_socWorker) { if (objReceived.objectType.Equals(typeof(loginInfo).ToString())) { loginInfo clientInfo = (loginInfo)objReceived.myObject; bool result = DS.isClientAuthorized((loginInfo)objReceived.myObject); if (result) { serverMW.appendDebugOutput("New client connecterd : " + clientInfo.username); } for (int i = 0; i < clients.Count; i++) { if (clients[i].getSocket() == m_socWorker) { clients[i].setName(clientInfo.username); } } userList connectedUsers = new userList(); for (int index = 0; index < clients.Count; index++) { connectedUsers.users.Add(clients[index].getUserName()); } STCB.sendUserlistToClients(connectedUsers); } else if (objReceived.objectType.Equals(typeof(messageToEveryone).ToString())) { messageToEveryone msg = (messageToEveryone)objReceived.myObject; STCB.sendMsgToAllClients(msg); } else if (objReceived.objectType.Equals(typeof(startPrivate).ToString())) { startPrivate startPRV = (startPrivate)objReceived.myObject; STCB.sendMsgToClient(startPRV.withWho, objReceived); } else if (objReceived.objectType.Equals(typeof(privateMessage).ToString())) { privateMessage prvMsg = (privateMessage)objReceived.myObject; STCB.sendMsgToClient(prvMsg.toWho, objReceived); } else if (objReceived.objectType.Equals(typeof(closePrivate).ToString())) { closePrivate closePrv = (closePrivate)objReceived.myObject; STCB.sendMsgToClient(closePrv.toWho, objReceived); } else { throw new Exception("Unsupported object type"); } }
internal void sendUserlistToClients(userList connectedUsers) { dataTypes objToSend = new dataTypes(); objToSend.setType(typeof(userList).ToString()); objToSend.setObject(connectedUsers); IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); formatter.Serialize(stream, objToSend); byte[] buffer = ((MemoryStream)stream).ToArray(); for (int index = 0; index < netServ.clients.Count; index++) { netServ.clients[index].getSocket().Send(buffer, buffer.Length, 0); } stream.Close(); }
public void OnDataReceived(IAsyncResult asyn) { try { SocketPacket socketData = (SocketPacket)asyn.AsyncState; int bytesReceived = 0; bytesReceived = socketData.m_currentSocket.EndReceive(asyn); byte[] buffer = new byte[bytesReceived + 1]; buffer = socketData.dataBuffer; IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); stream.Write(buffer, 0, buffer.Length); stream.Seek(0, 0); dataTypes objReceived = new dataTypes(); objReceived = (dataTypes)formatter.Deserialize(stream); parseObject(objReceived, socketData.m_currentSocket); stream.Close(); WaitForData(socketData.m_currentSocket); } catch (ObjectDisposedException) { System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n"); } catch (SocketException se) { if (se.ErrorCode.ToString().Equals("10054")) { SocketPacket socketData = (SocketPacket)asyn.AsyncState; serverMW.appendDebugOutput("Client disconnected : "); for (int i = 0; i < m_clientCount; i++) { if (m_socWorker[i] == socketData.m_currentSocket) { for (int j = i; j < m_clientCount - 1; j++) { m_socWorker[j] = m_socWorker[j + 1]; } } m_clientCount--; } for (int i = 0; i < clients.Count; i++) { if (clients[i].getSocket() == socketData.m_currentSocket) { serverMW.appendDebugOutput(clients[i].getUserName()); clients.Remove(clients[i]); } } socketData.m_currentSocket.Close(); socketData.m_currentSocket.Dispose(); userList connectedUsers = new userList(); for (int index = 0; index < clients.Count; index++) { connectedUsers.users.Add(clients[index].getUserName()); } STCB.sendUserlistToClients(connectedUsers); } } catch (Exception ex) { serverMW.appendDebugOutput(ex.Message); } }