Repository navigation
Expand file tree
/
Copy pathCThreadedSocketsManager.cpp
More file actions
101 lines (80 loc) · 2.08 KB
/
Copy pathCThreadedSocketsManager.cpp
File metadata and controls
101 lines (80 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
This file is a part of Threaded Sockets Module.
Copyright (C) 2015 Harsha Raghu (Shooting King)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CThreadedSocketManager.h"
CThreadedSocketManager::CThreadedSocketManager()
{
// Initializing count 0 and pointers to NULL
count = 0;
start = end = NULL;
}
CThreadedSocketManager::~CThreadedSocketManager()
{
// Generally called on AMXX_DETACH
CThreadedSocketItem* item;
CThreadedSocketItem* temp;
item = start;
// If the list is not empty
while( item != NULL )
{
temp = item->nxt();
item->ThreadState(STATE_DESTROY);
#ifdef _WIN32
WaitForSingleObject(item->Thread(), INFINITE);
#else
pthread_join(item->Thread(), 0);
#endif
// traverse to the next item in the list
item = temp;
}
}
void CThreadedSocketManager::AddItemToList( CThreadedSocketItem* item/*, bool Create*/ )
{
// Add item to the list
// Set count of an item
item->id(count);
// LIST Skeleton : start=item1 item2 itme3 ........ item(n-1) .. itemn=end
if( start == NULL )
{
// So this is our first item
start = item;
}
item->pev(end);
if( item->pev() != NULL )
{
item->pev()->nxt(item);
}
end = item;
count++;
}
void CThreadedSocketManager::RemoveItemFromList( CThreadedSocketItem* item )
{
// Remove certain item from list
if( item->pev() != NULL )
{
item->pev()->nxt(item->nxt());
}
else
{
start = item->nxt();
}
if( item->nxt() != NULL )
{
item->nxt()->pev(item->pev());
}
else
{
end = item->pev();
}
}