1 #include "../../common/Environment.h"
2 #include "CServerModel.h"
6 ////////////////////////////////////////////////////////////////////////////////
8 ////////////////////////////////////////////////////////////////////////////////
9 CServerModel::CServerModel()
13 ////////////////////////////////////////////////////////////////////////////////
15 ////////////////////////////////////////////////////////////////////////////////
16 CServerModel::~CServerModel()
18 for(size_t i = 0; i < m_Connections.size(); i++){
19 delete m_Connections[i];
21 for(AvatarInformationList::iterator p = m_AvatarInformations.begin(); p != m_AvatarInformations.end(); p++){
26 ////////////////////////////////////////////////////////////////////////////////
28 ////////////////////////////////////////////////////////////////////////////////
29 bool CServerModel::initialize()
31 m_ServerSocket.initialize();
32 m_ServerSocket.openPort();
34 m_Connections.resize(MAX_CONNECTION_NUMBER);
35 for(size_t i = 0; i < m_Connections.size(); i++){
36 m_Connections[i] = new CServerConnection();
37 m_Connections[i]->initialize();
38 m_ServerSocket.accept(m_Connections[i]);
43 ////////////////////////////////////////////////////////////////////////////////
45 ////////////////////////////////////////////////////////////////////////////////
46 bool CServerModel::process()
48 //
\92Ê
\90M
\83N
\83\89\83X
\82©
\82ç
\83f
\81[
\83^
\8eæ
\93¾
49 CommunicationBuffer* a_pBuffer;
50 for(size_t i = 0; i < m_Connections.size(); i++){
51 if(m_Connections[i]->receive(&a_pBuffer)){
52 //
\83\8d\83O
\83C
\83\93\8f\88\97\9d
53 if(a_pBuffer->m_Buffer[0] == 'i'){
54 char a_LoginName[256];
55 //
\90³
\8bK
\95\
\8c»
\82ð
\8eg
\82¢
\82½
\82¢
\81i
\92N
\82©
\8eÀ
\91\95\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81j
56 for(size_t p = 0; p < 256; p++){
57 if(a_pBuffer->m_Buffer[p + 2] == ';'){
58 a_LoginName[p] = '\0';
61 a_LoginName[p] = a_pBuffer->m_Buffer[p + 2];
64 AvatarInformation* temp = new AvatarInformation;
65 strcpy(temp->m_Name, a_LoginName);
66 temp->m_Position[0] = 0;
67 temp->m_Position[1] = 0;
68 temp->m_Position[2] = 0;
69 temp->m_Direction[0] = 1;
70 temp->m_Direction[1] = 0;
71 temp->m_Direction[2] = 0;
73 m_AvatarInformations.push_back(temp);
75 CommunicationBuffer a_SendBuffer;
76 a_SendBuffer.m_Length = sprintf(a_SendBuffer.m_Buffer, "i:%s;", a_LoginName);
77 m_Connections[i]->send(&a_SendBuffer);
78 m_Connections[i]->setAvatarInformationPointer(temp);
80 std::cout << "login " << a_LoginName << std::endl;
82 //
\83\8d\83O
\83A
\83E
\83g
\8f\88\97\9d
83 else if(a_pBuffer->m_Buffer[0] == 'o'){
84 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
86 CommunicationBuffer a_SendBuffer;
87 a_SendBuffer.m_Length = sprintf(a_SendBuffer.m_Buffer, "o:%s;", a_pAvatarInformation->m_Name);
88 m_Connections[i]->send(&a_SendBuffer);
90 std::cout << "logout " << a_pAvatarInformation->m_Name << std::endl;
92 //
\83A
\83o
\83^
\81[
\82ð
\8dí
\8f\9c\82·
\82é
93 for(AvatarInformationList::iterator p = m_AvatarInformations.begin(); p != m_AvatarInformations.end(); p++){
94 if(*p == a_pAvatarInformation){
97 m_AvatarInformations.erase(p);
100 m_Connections[i]->setAvatarInformationPointer(NULL);
103 else if(a_pBuffer->m_Buffer[0] == 'p'){
104 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
106 CommunicationBuffer a_SendBuffer;
107 if(!m_AvatarInformations.empty()){
108 for(AvatarInformationList::iterator p = m_AvatarInformations.begin(); p != m_AvatarInformations.end(); p++){
109 a_SendBuffer.m_Length = sprintf(a_SendBuffer.m_Buffer, "p:%s:%f:%f:%f:%f:%f:%f:%f;",
114 (*p)->m_Direction[0],
115 (*p)->m_Direction[1],
116 (*p)->m_Direction[2],
119 if(!m_Connections[i]->send(&a_SendBuffer)){
120 std::cout << "do not send position" << std::endl;
125 a_SendBuffer.m_Length = sprintf(a_SendBuffer.m_Buffer, "p;");
126 if(!m_Connections[i]->send(&a_SendBuffer)){
127 std::cout << "do not send position" << std::endl;
131 //
\83A
\83N
\83V
\83\87\83\93\83R
\83}
\83\93\83h
\82ð
\8f\88\97\9d
132 //
\91O
\95û
\82Ö
\88Ú
\93®
133 else if(a_pBuffer->m_Buffer[0] == 'f'){
134 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
136 const double M_PI = 3.14159265357989;
137 //
\90l
\82Ì
\95à
\82
\91¬
\93x
\82ð1
\95b
\8aÔ
\82É1m
\82Æ
\82·
\82é
138 double a_VelocityParTimes = 1.0 / 60;
139 // 2
\95b
\82Å
\90U
\82è
\95Ô
\82é
\81i180
\93x = pi
\81j
\82Æ
\82·
\82é
\81B
140 double a_RotateParTimes = M_PI / (2 * 60);
142 a_pAvatarInformation->m_Position[0] += a_pAvatarInformation->m_Direction[0] * a_VelocityParTimes;
143 a_pAvatarInformation->m_Position[1] += a_pAvatarInformation->m_Direction[1] * a_VelocityParTimes;
144 a_pAvatarInformation->m_Position[2] += a_pAvatarInformation->m_Direction[2] * a_VelocityParTimes;
146 //
\8cã
\95û
\82Ö
\88Ú
\93®
147 else if(a_pBuffer->m_Buffer[0] == 'b'){
148 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
150 const double M_PI = 3.14159265357989;
151 //
\90l
\82Ì
\95à
\82
\91¬
\93x
\82ð1
\95b
\8aÔ
\82É1m
\82Æ
\82·
\82é
152 double a_VelocityParTimes = 1.0 / 60;
153 // 2
\95b
\82Å
\90U
\82è
\95Ô
\82é
\81i180
\93x = pi
\81j
\82Æ
\82·
\82é
\81B
154 double a_RotateParTimes = M_PI / (2 * 60);
156 a_pAvatarInformation->m_Position[0] -= a_pAvatarInformation->m_Direction[0] * a_VelocityParTimes;
157 a_pAvatarInformation->m_Position[1] -= a_pAvatarInformation->m_Direction[1] * a_VelocityParTimes;
158 a_pAvatarInformation->m_Position[2] -= a_pAvatarInformation->m_Direction[2] * a_VelocityParTimes;
161 else if(a_pBuffer->m_Buffer[0] == 'r'){
162 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
164 const double M_PI = 3.14159265357989;
165 //
\90l
\82Ì
\95à
\82
\91¬
\93x
\82ð1
\95b
\8aÔ
\82É1m
\82Æ
\82·
\82é
166 double a_VelocityParTimes = 1.0 / 60;
167 // 2
\95b
\82Å
\90U
\82è
\95Ô
\82é
\81i180
\93x = pi
\81j
\82Æ
\82·
\82é
\81B
168 double a_RotateParTimes = M_PI / (2 * 60);
170 double x = a_pAvatarInformation->m_Direction[0];
171 double y = a_pAvatarInformation->m_Direction[1];
172 a_pAvatarInformation->m_Direction[0] = x * cos(a_RotateParTimes) + y * sin(a_RotateParTimes);
173 a_pAvatarInformation->m_Direction[1] = -x * sin(a_RotateParTimes) + y * cos(a_RotateParTimes);
176 else if(a_pBuffer->m_Buffer[0] == 'l'){
177 AvatarInformation* a_pAvatarInformation = m_Connections[i]->getAvatarInformationPointer();;
179 const double M_PI = 3.14159265357989;
180 //
\90l
\82Ì
\95à
\82
\91¬
\93x
\82ð1
\95b
\8aÔ
\82É1m
\82Æ
\82·
\82é
181 double a_VelocityParTimes = 1.0 / 60;
182 // 2
\95b
\82Å
\90U
\82è
\95Ô
\82é
\81i180
\93x = pi
\81j
\82Æ
\82·
\82é
\81B
183 double a_RotateParTimes = M_PI / (2 * 60);
185 double x = a_pAvatarInformation->m_Direction[0];
186 double y = a_pAvatarInformation->m_Direction[1];
187 a_pAvatarInformation->m_Direction[0] = x * cos(a_RotateParTimes) - y * sin(a_RotateParTimes);
188 a_pAvatarInformation->m_Direction[1] = x * sin(a_RotateParTimes) + y * cos(a_RotateParTimes);
193 //
\89¹
\90º
\82ð
\8d\87\90¬
195 //
\8eæ
\93¾
\83R
\83}
\83\93\83h
\82É
\91Î
\82µ
\82Ä
\83f
\81[
\83^
\91\97\90M