Skip to content

Commit

Permalink
basic functionality completed
Browse files Browse the repository at this point in the history
  • Loading branch information
ChauhanAbhinav committed Aug 20, 2019
1 parent 92e19c0 commit 827721f
Show file tree
Hide file tree
Showing 34 changed files with 650 additions and 73 deletions.
4 changes: 2 additions & 2 deletions server/db/config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ const dbUser = {
}
const dbUrl = {
remoteUrl: 'mongodb+srv:https://'+dbUser.user+':'+dbUser.pass+'@cluster0-winsn.mongodb.net/test',
LocalUrl: 'localhost:27017'
localUrl: 'mongodb:https://127.0.0.1:27017'
}
const dbConfig = {dbName: dbName, dbUrl: dbUrl, dbUser: dbUser}

//export
module.exports = dbConfig;
module.exports = dbConfig;
8 changes: 4 additions & 4 deletions server/db/dbUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ let callback, db;
// exporting the mongo
mongo = {
connect: (callback)=> {
if(!db) MongoClient.connect(dbConfig.dbUrl.remoteUrl,{ useNewUrlParser: true }, function(err, client){

if(!db) MongoClient.connect(dbConfig.dbUrl.localUrl,{ useNewUrlParser: true }, function(err, client){

if(err) throw err;
console.log('Mongodb connected');
db = client.db(dbConfig.dbName);
// client.close();

callback(err, mongo.getDb()); // db will be passed in the argument of call back
});
else {
Expand All @@ -25,4 +25,4 @@ getDb: function(){
}

}
module.exports = mongo;
module.exports = mongo;
86 changes: 77 additions & 9 deletions server/db/services/user.service.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
// import db module
let mongo = require('../dbUtil');
let coll;
mongo.connect((err, db)=>{
var db;
mongo.connect((err, database)=>{
if(err) {
console.log(err);
throw err;
}
coll = db.collection('users');
db = database;
});

// user services
Expand All @@ -17,13 +17,13 @@ let ifRegistered = (user)=>{

return new Promise((resolve, reject)=>{

coll.find({mobile: user.mobile}).toArray(function(err, data) {
if (err)
db.collection('users').find({mobile: user.mobile}).toArray(function(err, data) {
if (err)
reject(err);
else {
if(data.length == 0) {
reject('User not found');

}
else
{
Expand All @@ -37,21 +37,89 @@ let ifRegistered = (user)=>{

};
let createUser = (user)=>{

return new Promise((resolve, reject)=>{

coll.insert(user, function(err, data) {
db.collection('users').insert(user, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});

});
}

let getAllUsers = ()=>{

return new Promise((resolve, reject)=>{

db.collection('users').find({},{_id: false}).toArray(function(err, data) {
if (err)
reject(err);
else {
if(data.length == 0) {
reject('No user found');

}
else
{
// console.log('user found: ', user)
resolve(data);
}
}
});

});
}

let addGroup = (group)=>{
console.log(group);
let user1 = Number(String(group).slice(0,10));
let user2 = Number(String(group).slice(10, 20));

return new Promise((resolve, reject)=>{
coll = db.collection('groups');
coll.insertMany([{'mobile': user1, 'group': group},{'mobile': user2, 'group': group}], function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});

});
}

let getGroups = (user)=>{

return new Promise((resolve, reject)=>{
console.log(user);
db.collection('groups').find({"mobile" : user}).toArray(function(err, data) {
if (err)
reject(err);
else {
// console.log(data);
if(data.length == 0) {
reject('No user found');

}
else
{
// console.log('user found: ', user)
resolve(data);
}
}
});

});
}
// export service
service.ifRegistered = ifRegistered;
service.createUser = createUser;
service.getAllUsers = getAllUsers;
service.addGroup = addGroup;
service.getGroups = getGroups;

module.exports = service;
module.exports = service;
44 changes: 44 additions & 0 deletions server/routes/chatRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const express = require('express');
const app = express();
const router = express.Router();

let userService = require('../db/services/user.service');

router.get('/userslist',(req, res)=>{
userService.getAllUsers()
.then(function (data) {
res.status(200).json(data);
}, function(err) {
console.log(err);
// registration failed
res.status(400).json(err);
})

});

router.post('/addgroup',(req, res)=>{
// console.log("req",req.body);
userService.addGroup(req.body.group)
.then(function (data) {
res.status(200).json(data);
}, function(err) {
console.log(err);
res.status(400).json(err);
});

});

router.post('/getgroups',(req, res)=>{
// console.log(req.body.user);
userService.getGroups(req.body.user)
.then(function (data) {
res.status(200).json(data);
}, function(err) {
console.log(err);
// registration failed
res.status(400).json(err);
})

});

module.exports = router;
79 changes: 67 additions & 12 deletions server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,77 @@ app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

//importing routes
var router = require('./routes/loginRoutes');
app.use('/', router); // applying routes to the app
var loginRouter = require('./routes/loginRoutes');
var chatRouter = require('./routes/chatRoutes');
app.use('/', loginRouter); // applying routes to the app
app.use('/', chatRouter); // applying routes to the app

// starting the server
http.listen(3000, function(){
console.log('server is listening on port '+PORT);
});

// socket.io =====================================
// socket.io -public=====================================
io_public = io.of('/public'); // namespace public
public_usernames = [];
io_public.on('connection', function(socket){
socket.on('adduser', function(username){
socket.username = username;
public_usernames[username] = username
socket.room = 'public'; //assign default public room
socket.join(socket.room);
// console.log(usernames);

io.on('connection', function(socket){
console.log('a user connected');
io.emit('server','a user has joined the room');

socket.on('disconnect', function(){
console.log('user disconnected');
io.emit('server','a user left the room');
});
});
// echo to client they've connected
socket.emit('server', 'you have connected to a public room');

// echo to public room that a person has connected to their room
socket.broadcast.to('public').emit('server', '<i>' + socket.username + '</i> has connected to this room');
});

socket.on('sendchat', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io_public.to(socket.room).emit('updatechat', socket.username, data);
});

socket.on('disconnect', function(){
socket.broadcast.to('public').emit('server','<i>' + socket.username + '</i> has left the room');
socket.leave(socket.room);
delete public_usernames[socket.username];
// console.log(usernames);
});

});

// socket.io -one to one =================================================

io_private = io.of('/private'); // namespace public
private_rooms = [];
io_private.on('connection', function(socket){

socket.on('createRoom', function(userData){
socket.user1 = userData[0];
socket.room = userData[1];
private_rooms[socket.room] = socket.room;
console.log(private_rooms);
socket.join(socket.room);
// console.log(usernames);

// echo to client they've connected
socket.emit('server', 'you have connected to a private room: '+socket.room);

// echo to public room that a person has connected to their room
socket.broadcast.to(socket.room).emit('server', '<i>' + socket.user1 + '</i> has connected to this room');
});

socket.on('sendchat', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io_private.to(socket.room).emit('updatechat', socket.user1, data);
});

socket.on('disconnect', function(){
socket.broadcast.to(socket.room).emit('server','<i>' + socket.user2 + '</i> has left the room');
socket.leave(socket.room);
});

});
14 changes: 13 additions & 1 deletion src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,23 @@ import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LoginComponent } from './login/login.component'
import { DashboardComponent } from './dashboard/dashboard.component';
import { HomeComponent } from './home/home.component';
import { PrivateChatComponent } from './private-chat/private-chat.component';
import { ContactsComponent } from './contacts/contacts.component';
import { UsersComponent } from './users/users.component';

const routes: Routes = [
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
{ path: 'login', component: LoginComponent },
{path: 'dashboard', component: DashboardComponent}
{ path: 'dashboard', component: DashboardComponent,
children: [ //<---- child components declared here
{ path: '', redirectTo: 'home', pathMatch: 'full' },
{ path:'home', component: HomeComponent },
{ path:'private/:group', component: PrivateChatComponent },
{ path:'contacts', component: ContactsComponent },
{ path:'userlist', component: UsersComponent },
]
}
];

@NgModule({
Expand Down
8 changes: 8 additions & 0 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,21 @@ import { MyMaterialModule } from './helpers/material.module';
import { LoginComponent } from './login/login.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { CookieService } from 'ngx-cookie-service';
import { HomeComponent } from './home/home.component';
import { PrivateChatComponent } from './private-chat/private-chat.component';
import { ContactsComponent } from './contacts/contacts.component';
import { UsersComponent } from './users/users.component';

@NgModule({
declarations: [
AppComponent,
TopBarComponent,
LoginComponent,
DashboardComponent,
HomeComponent,
PrivateChatComponent,
ContactsComponent,
UsersComponent,
],
imports: [
BrowserModule,
Expand Down
Empty file.
8 changes: 8 additions & 0 deletions src/app/contacts/contacts.component.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<mat-toolbar>List of All Groups</mat-toolbar>
<mat-list>
<mat-list-item *ngFor="let data of groups" style="width:100%">
<span style="display: inline-block;width:200px;">{{data.group}}</span>
<button mat-button color="primary" (click)="startChat(data.group)"> Chat</button>
</mat-list-item>
</mat-list>

25 changes: 25 additions & 0 deletions src/app/contacts/contacts.component.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { ContactsComponent } from './contacts.component';

describe('ContactsComponent', () => {
let component: ContactsComponent;
let fixture: ComponentFixture<ContactsComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ContactsComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(ContactsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
Loading

0 comments on commit 827721f

Please sign in to comment.